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

标签 c# xunit fixtures xunit.net

我想在所有测试中共享 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/

相关文章:

c# - 实体 orderby 的 linq

c# - 使用 Moq 和 xUnit 对服务进行单元测试

c# - 在 Xunit 中处理多个测试用例的首选方法是什么?

c# - Xunit 和 Mock 数据与最小起订量

ruby-on-rails - Ruby on Rails 使用外键删除固定装置

c# - 检查类的实例是否用属性注释

c# - 在泛型方法中调用重载方法

c# - 在 C# 中,是否可以将两个不同的类作为返回类型从一层传递到另一层?

Python Behave - 如何从场景传递值以在功能级别的固定装置中使用?

ruby-on-rails - 使用大量种子数据测试 Rails 应用程序