我正在尝试使用 xUnit 和单个 IHost 在 .NET 中设置集成测试
阅读 xUnit 的文档,我找到了一种在使用 Class Fixtures 和 Collection Fixtures 的测试之间共享上下文 (https://xunit.net/docs/shared-context) 的方法,但是对于 xUnit 中的共享上下文,测试按顺序运行我想创建并行测试。
现在我有一个 AppFactory
public class AppFactory : WebApplicationFactory<IAppMarker> { ... }
合集
[CollectionDefinition("AppCollection")]
public class AppCollection : ICollectionFixture<AppFactory> { }
和一些继承自基础测试类的测试类
[Collection("AppCollection")]
public class BaseTest {
...
public BaseTest(
AppFactory appFactory
) {
AppFactory = appFactory;
HttpClient = appFactory.CreateClient();
}
...
}
public class Test1 : BaseTest { ... }
public class Test2 : BaseTest { ... }
这种方法的问题在于它在集合中顺序运行,但使用在集合中创建的单个 IHost
阅读 Microsoft 的文档 (https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-7.0) 并检查示例应用程序,我看到他们使用了IClassFixture 并正在为测试创建许多 IHost,使其在类级别并行。
这种方法的问题是有很多 IHost(每个班级一个)并且测试按班级并行
我在方法级别并行化的想法是个坏主意?是否可以使用 xUnit 通过单个 IHost 在方法级别进行并行化?拥有单个 IHost 是一种好方法吗?