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);
    }
  • 相关阅读:
    [knowledge][perl][pcre][sed] sed / PCRE 语法/正则表达式
    [knowledge][模式匹配] 字符匹配/模式匹配 正则表达式 自动机
    [daily] 内存越界的分析与定位
    [DPI] Cisco Application Visibility and Control
    [bigdata] palantir
    [daily][nfs] nfs客户端设置
    [knowledge][ETA] Encrypted Traffic Analytics
    [tcpreplay] tcpreplay高级用法--使用tcpreplay-edit进行循环动态发包
    [redhat][centos] 让不同小版本的CentOS7使用相同的内核版本
    [grub2] grub2修改启动顺序
  • 原文地址:https://www.cnblogs.com/mailaidedt/p/11642595.html
Copyright © 2011-2022 走看看