zoukankan      html  css  js  c++  java
  • .Net core webapi的常用Test方法

    第一种:使用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);

    遇到的问题:测试单独的Controller类中的api方法,TestServer 请求api地址,提示404

     Test seperate library controller 404

    在 StartupTest 的启动类中,addMvc服务的后面增加 AddApplicationPart,将对应controller的assembly导入即可.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .AddApplicationPart(typeof(ServiceHookController).Assembly);
    }
  • 相关阅读:
    最精简的django程序
    spring+mongo
    从零搭建mongo分片集群的简洁方法
    java对redis的基本操作
    awk输出指定列
    sed输出指定行
    Bash的循环结构(for和while)
    用ffmpeg切割音频文件
    Python判断字符串是否全是字母或数字
    Python函数: any()和all()的用法
  • 原文地址:https://www.cnblogs.com/mailaidedt/p/11642595.html
Copyright © 2011-2022 走看看