我目前正在尝试设置一些测试,以检查我的代码是否正常工作。但是,当我有多个测试时,所有的测试都失败了。
我认为这是因为它们是并行运行的,这显然导致了与数据库上下文的冲突。
为了抵消这一点,我尝试了一个内存数据库,并基于guid创建了一个新的数据库,这个guid在测试之前就被解析了,但是,我读到内存数据库中并不是最好的测试方法,因为它不是真正的反映。因此,我选择使用测试Server。我计划在每次测试后拆掉它--我知道这可能比平常要花很多时间,但我很乐意接受,因为它准确地反映了与数据库交互的代码。
然而,为此,我认为我需要单独运行测试,而不是并行运行。
我的测试非常简单,它只是测试一个200和一个计数。单独运行它们是非常有效的。
public class GetUserEndpointTest()
{
[Fact]
public async Task OnSuccess_ReturnStatusCodeOk()
{
await using var application = new Application();
var client = application.CreateClient();
var response = await client.GetAsync("/v1/users");
response.EnsureSuccessStatusCode();
}
[Fact]
public async Task OnSuccess_ReturnsTheCorrectUserCount()
{
await using var application = new Application();
var client = application.CreateClient();
var users = await client.GetFromJsonAsync<List<User>>("/v1/users");
users.Count.Shound().Be(1);
}
}我的应用程序工厂很简单:
class Application : WebApplicationFactory<Program>
{
protected override IHost CreateHost(IHostBuilder builder)
{
builder.ConfigureServices(services =>
{
services.RemoveAll(typeof(DbContextOptions<ApplicationContext>));
services.AddDbContext<ApplicationContext>(options =>
{
options.UseSqlServer(
"Server=localhost;Database=testing_database;Trusted_Connection=True;"
);
});
});
return base.CreateHost(builder);
}
}发布于 2022-03-23 11:28:29
在用XUnit进行测试时,可以通过将它们放在“集合”中来防止测试的并行执行。通过用Collection属性“修饰”类声明来声明哪些测试属于集合。
这是在https://xunit.net/docs/running-tests-in-parallel上解释的。
例如:
[Collection("NonParallelTestCollection")]
public class MyUnitTests1
{
// your tests here ...
}
[Collection("NonParallelTestCollection")]
public class MyUnitTests2
{
// your tests here ...
}在本例中,两个类中的任何一个测试都不会并行运行。
https://stackoverflow.com/questions/71577600
复制相似问题