gpt4 book ai didi

c# - 如何在所有测试类中共享一个 fixture ?

转载 作者:行者123 更新时间:2023-12-04 09:00:02 24 4
gpt4 key购买 nike

我想在所有测试中共享 DBfixture。这是为此目的创建的集合:

[CollectionDefinition("db")]
public class TestColDefinition : IClassFixture<DBfixture> { }

我有一个基类,我从中派生了我的测试类:

public class TestBase
{
protected readonly ITestOutputHelper testOutputHelper;
protected DBfixture dbf;

public TestBase(ITestOutputHelper testOutputHelper, DBfixture dbf)
{
this.testOutputHelper = testOutputHelper;
this.dbf = dbf;
}
}

[Collection("db")]
public class TestClass1 : TestBase
{
public TestClass1(ITestOutputHelper testOutputHelper, DBfixture dbf) : base(testOutputHelper, dbf) { }

[Fact]
public void fact(){}
}

[Collection("db")]
public class TestClass2 : TestBase
{
public TestClass2(ITestOutputHelper testOutputHelper, DBfixture dbf) : base(testOutputHelper, dbf) { }

[Fact]
public void fact(){}
}

但是当我运行测试时,会创建两个 DBfixture 对象(每个测试类一个)。如果没有集合,则会创建四个对象。我如何设置它以便在所有测试类之间共享一个对象?

最佳答案

您可以使用 collection fixture 并在该集合下添加每个测试以实现您上面提到的。但是,如果您使用单个收集 fixture ,那么您的整个测试将串行运行,除非您在 Xunitrunner 配置中明确禁用它。

Xunit Docs 的观点之一:测试集合还会影响 xUnit.net 在并行运行测试时运行测试的方式。

更多详情请阅读: https://xunit.net/docs/shared-context

替代方法是,使用静态类来存储您可以在开始测试时分配的数据库上下文,并在整个测试生命周期中使用它。

关于c# - 如何在所有测试类中共享一个 fixture ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63600252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com