.Net core webapi的常用Test方法

谁说胖子不能爱 提交于 2019-11-30 22:13:18

 

第一种:使用ServicProviderHelper类,配置appsetting.json配置及依赖的服务

ServiceProviderHelper类,创建静态的ServiceProvider依赖注入服务器

 public class ServiceProviderHelper
    {
        private static ServiceProvider _serviceProvider { get; set; }

        public static ServiceProvider ServiceProvider
        {
            get
            {

                if (_serviceProvider == null)
                {
                    IConfiguration Configuration = new ConfigurationBuilder()
                .SetBasePath(AppContext.BaseDirectory)
                .AddJsonFile("appsettings.json")
                .Build();
                    //IConfiguration Configuration = new ConfigurationBuilder().SetBasePath("appsettings.json").Build();

                    var services = new ServiceCollection();

                    services.AddMvc((mvcOption =>
                    {
                        mvcOption.Filters.Add<ApiAuthFilter>();
                        mvcOption.Filters.Add<ApiExceptionFilter>();
                    }));

                    services.ServiceCollectionInit(Configuration);

                    services.DatabaseServiceInit<DbContext>(Sem.Common.DataBaseType.Greenplum, Configuration);

                    services.TryAddTransient<IAccountMediaService, AccountMediaService>();
                    _serviceProvider = services.BuildServiceProvider();


                }
                return _serviceProvider;

            }
        }

    }

 

第二种:创建 “测试服务”实例,进行调用

命名空间:Microsoft.AspNetCore.TestHost

类名:TestServer

构造函数或者实例变量中,创建HttpClient对象,也包括了ServiceProvider属性。
 public (ITestOutputHelper ouput)
        {
            _output = ouput;

            var server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup<StartupTest>());  //StartupTest为 StartUp启动类
            Client = server.CreateClient();

            _service = server.Host.Services;
            #region 其他方式注入服务测试

            //var _service = server.Host.Services.GetService<UserService>();
            //var server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup<Startup>());
            //var _controller = server.Host.Services.GetService<ValuesController>();

            //var httpContextAccessorMock = new Mock<IHttpContextAccessor>();
            //httpContextAccessorMock.Setup(x => x.HttpContext.Request.Cookies["username"]).Returns("yubaolee");

            //var testServer = new TestServer(WebHost.CreateDefaultBuilder()
            //    .ConfigureServices(u => u.AddScoped(x => httpContextAccessorMock.Object))
            //    .UseStartup<Startup>());
            //_service = server.Host.Services.GetService<UserService>();
            #endregion

        }

        public HttpClient Client { get; }

 使用方式:

  HttpContent httpContent = new StringContent(JsonFormatter.SerializeObject(jsonObj, JsonFormatterOptions.IgnoreEmptyString & JsonFormatterOptions.IgnoreNull & JsonFormatterOptions.IgnoreZero), System.Text.Encoding.UTF8);
            httpContent.Headers.Add("T1","aaa");
            httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

            var response = await Client.PostAsync("/api/v1/xx", httpContent);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            var result = await response.Content.ReadAsStringAsync();

            _output.WriteLine(result);

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!