基于asp.net core项目构建单元测试

做这个笔记的缘由:
在webapi学习项目中想对项目服务层进行测试,但是webapi项目的DbContext是由Startup中配置依赖注入的,服务层再由构造函数依赖注入获得DbContext。
在单元测试项目中要对服务层进行测试就必须要自己创建并配置DbContext服务注入到测试项目中。

  • 需要NuGet添加与webapi项目相同的ef core数据库提供程序
  • 添加并配置DbContext服务
      public class DbFixture
      {
          public DbFixture()
          {
              var serviceCollection = new ServiceCollection();
              serviceCollection.AddDbContext<AppDbContext>(option =>
              {
                  option.UseMySql("server=localhost; database=ShopDB; uid=root; pwd=123456;", ServerVersion.AutoDetect("server=localhost; database=ShopDB; uid=root; pwd=123456;"));
              });
              AppDbContext = serviceCollection.BuildServiceProvider().GetService<AppDbContext>();
          }
    
          public AppDbContext AppDbContext { get; private set; }
      }
    
  • 在单元测试项目测试类中通过构造函数注入DbContext并实例化服务类就可以对服务类进行测试了
      public class TenantRepositoryTest : TestBase, IClassFixture<DbFixture>
      {
          private ITenantRepository _tenantRepository;
    
          public TenantRepositoryTest(ITestOutputHelper output, DbFixture fixture) : base(output)
          {
              _tenantRepository = new TenantRepository(fixture.AppDbContext);
          }
    
          [Fact]
          public void GetMaxCode()
          {
              Output.WriteLine(_tenantRepository.GetMaxCode().ToString());
          }
      }
    
posted @ 2021-11-01 22:58  weichangk  阅读(128)  评论(0编辑  收藏  举报