【发布时间】:2020-05-31 17:07:40
【问题描述】:
我正在使用 InMemory 数据库在我的 ASP .NET Core Web API 应用程序中测试我的存储库层。 因此我有一个问题,在几次测试中,我设置了数据。但是,使用相同的代码,当我运行测试时,有时数据存在,有时不存在。我不明白为什么。
我正在使用 XUnit 测试框架。
这是我的测试:
public class UserRepositoryTest
{
private ApplicationDbContext context;
void setup()
{
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
.UseInMemoryDatabase(databaseName: "ApplicationDatabase")
.Options;
this.context = new ApplicationDbContext(options);
this.context.Database.EnsureDeleted();
}
[Fact]
void GetUserByUsernameTest()
{
this.setup();
// Given
var manager = new User {Username = "Ombrelin", Email = "test@test.fr"};
context.Users.Add(manager);
context.SaveChanges();
// When
var repo = new UserRepository(context);
var user = repo.GetUserByUsername("Ombrelin");
// Then
Assert.Equal("Ombrelin", user.Username);
}
[Fact]
void FindUsersByUsernameContainsTest()
{
this.setup();
// Given
var manager1 = new User {Username = "Arsène", Email = "test@test.fr"};
var manager2 = new User {Username = "Jean Michel", Email = "test@test.fr"};
context.Users.Add(manager1);
context.Users.Add(manager2);
context.SaveChanges();
// When
var repo = new UserRepository(context);
var users = repo.findUsersByUsernameContains("Ars");
// Then
Assert.Single(users);
}
有人知道吗?
提前致谢,
【问题讨论】:
-
旁白:xUnit 将在每次测试之前调用类构造函数。不需要
setup方法,只需将其移至构造函数中即可
标签: c# unit-testing asp.net-core .net-core in-memory-database