在 .NET 项目中如何使用单个 IHost 设置与 xUnit 的并行集成测试

问题描述 投票:0回答:0

我正在尝试使用 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 是一种好方法吗?

.net integration-testing xunit parallel-testing
© www.soinside.com 2019 - 2024. All rights reserved.