• dotnetcore 单元测试


       dotnetcore的单元测试目前支持的比较好的是xunit,首先通过nuget添加组件dotnet-test-xunit 和 xunit。如果有依赖注入可在构造方法中,相当于Nunit中的[Setup]。例如:

       

     1  public class BaseRepository
     2     {
     3         public BaseRepository()
     4         {
     5             
     6             var builder = new ConfigurationBuilder()
     7                .SetBasePath(AppContext.BaseDirectory)
     8                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
     9                .AddEnvironmentVariables();
    10             var configuration = builder.Build();
    11             var containerBuilder = new ContainerBuilder();
    12             containerBuilder.RegisterInstance<IConfigurationRoot>(configuration).SingleInstance();
    13             var container = containerBuilder.Build();
    14             var sl = new AutofacServiceLocator(container);
    15 
    16             ServiceLocator.SetLocatorProvider(() => sl);
    17             containerBuilder.RegisterModule<AutofacModule>();
    18 
    19             var workEngin = new WebApiCoreWorkEngine(container);
    20             workEngin.Initialize();
    21         }
    22     }

     编译后,回出现在vs的测试资源管理器中。

    关于两个实体的值的比较,可通过引入“FluentAssertions” 解决,可方便的对实体和集合值的对比。

     如果需要对webapi进行单元测试,那么需引入“MyTested.AspNetCore.Mvc.Universe”。在测试项目中添加继承webapi中startup的类TestStartup,需要注意的是当前项目依赖必须是:

    "Microsoft.NETCore.App": {
    "version": "1.0.1",
    "type": "platform"
    }。

    注意加"type": "platform"。

    在TestStartup中完成测试环境的依赖注入,

     1  public class TestStartup:Startup
     2     {
     3         
     4         public TestStartup(IHostingEnvironment env) : base(env)
     5         {
     6             
     7         }
     8 
     9         public IServiceProvider ConfigureTestServices(IServiceCollection services)
    10         {
    11             var types = Typefinder.GetTypeEndWith("Repository", "WebApiCore.Repository");
    12             foreach (var type in types)
    13             {
    14                 var interfaces = type.GetInterfaces().Where(d => !d.IsConstructedGenericType).ToList();
    15                 services.AddSingleton(interfaces[0], type);
    16             }
    17             types = Typefinder.GetTypeEndWith("Application", "WebApiCore.Application");
    18             foreach (var type in types)
    19             {
    20                 services.AddSingleton(type);
    21 
    22             }
    23             
    24             return base.ConfigureServices(services);
    25 
    26         }
    27     }

       然后可以对具体接口的测试,如

            [Fact]
            public void GetValues()
            {
                MyMvc.Controller<ShowController>()
                    .Calling(d => d.HelloAsync())
                    .ShouldReturn()
                    .ResultOfType<OutputWithData<string>>().Passing(d=>d.ResultStatus==1);
    
    
            }
  • 相关阅读:
    前端学习(六):body标签(四)
    前端学习(五):body标签(三)
    前端学习(四):body标签(二)
    前端学习(三):body标签(一)
    volatile的作用以及原理解析
    【转载】synchronized锁的升级过程
    从三个层面解析synchronized原理
    将网页图片转base64打包导出实战和踩坑
    synchronized锁住的到底是什么以及用法作用
    多线程之程序的局部性原理和伪共享问题
  • 原文地址:https://www.cnblogs.com/ryansecreat/p/6097971.html
Copyright © 2020-2023  润新知