我目前正在开发一个使用EF Core 2.0的ASP.NET Core 2.0 Web API。我计划实现仓储+工作单元模式,并已经创建了抽象、接口等。由于我采用TDD方法,我想在实施之前先编写这些接口的测试。
我面临的主要问题与语义有关。我的解决方案中创建了两个项目,一个是单元测试项目,另一个是集成测试项目。对我来说,显然一个还测试数据库的测试不是单元测试,因此应该放在集成测试项目中。但问题是,我计划使用EntityFrameworkCore.InMemory提供程序为每个测试启动虚假内存数据库。
所以,每个测试都应该具有以下结构:
所以我的问题是,EntityFrameworkCore.InMemory是否提供足够的抽象层次,以便上述类可以被视为单元测试,还是应将其放置在IntegrationTests项目中?
我面临的主要问题与语义有关。我的解决方案中创建了两个项目,一个是单元测试项目,另一个是集成测试项目。对我来说,显然一个还测试数据库的测试不是单元测试,因此应该放在集成测试项目中。但问题是,我计划使用EntityFrameworkCore.InMemory提供程序为每个测试启动虚假内存数据库。
所以,每个测试都应该具有以下结构:
[TestClass]
public class GamesRepositoryTest
{
AppDbContext _context;
IGamesRepository _repository;
public GamesRepositoryTest()
{
}
[TestInitialize]
public void Initialize()
{
DbContextOptionsBuilder<AppDbContext> builder = new DbContextOptionsBuilder<AppDbContext>().UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString());
_context = new AppDbContext(builder.Options);
_repository = new GamesRepository(_context);
}
[TestCleanup]
public void Cleanup()
{
_context.Database.EnsureDeleted();
}
}
所以我的问题是,EntityFrameworkCore.InMemory是否提供足够的抽象层次,以便上述类可以被视为单元测试,还是应将其放置在IntegrationTests项目中?