我正在设置测试框架,以针对不同情况使用内存数据库。每个测试使用一个“唯一”数据库,并且测试的每个步骤都使用不同的上下文作为实体框架。
问题是,即使测试使用不同的“内存”数据库以及实体框架的不同上下文,数据库中的身份似乎也会增加。
例如,我有2个单元测试:
[Test]
public async Task CanGetAllFromRepository()
{
var options = new DbContextOptionsBuilder<MyContext>()
.UseInMemoryDatabase(databaseName: "CanGetAllFromRepository").Options;
var testa = new User();
var testb = new User();
var testc = new User();
using (var context = new MyContext(options))
{
await context.Users.AddAsync(testa);
await context.Users.AddAsync(testb);
await context.Users.AddAsync(testc);
await context.SaveChangesAsync();
}
using (var context = new MyContext(options))
{
var repo = new UserRepository(context);
var all = await repo.GetAllAsync();
Assert.IsTrue(all.Count == 3);
}
}
[Test]
public async Task CanGetByIdFromRepository()
{
var options = new DbContextOptionsBuilder<MyContext>()
.UseInMemoryDatabase(databaseName: "CanGetByIdFromRepository").Options;
var testa = new User();
var testb = new User();
var testc = new User();
using (var context = new SalesPortalContext(options))
{
await context.User.AddAsync(testa);
await context.User.AddAsync(testb);
await context.User.AddAsync(testc);
await context.SaveChangesAsync();
}
using (var context = new MyContext(options))
{
var repo = new UserRepository(context);
var usera = await repo.GetByIdAsync(1);
var userb = await repo.GetByIdAsync(2);
var userc = await repo.GetByIdAsync(3);
Assert.IsNotNull(usera);
Assert.IsNotNull(userb);
Assert.IsNotNull(userc);
}
}
如果我按1对1进行测试,那不是问题,而是一起运行;然后对于第二个单元测试,用户的标识集ID开始为4、5、6。(单独运行时,其ID分别为1、2、3)。
我设法通过手动为用户分配其ID来解决此问题,例如:
var testa = new User() { Id = 1 };
var testb = new User() { Id = 2 };
var testc = new User() { Id = 3 };
答案 0 :(得分:0)
这似乎是EF github上的一个未解决问题: https://github.com/aspnet/EntityFrameworkCore/issues/6872