问题描述
我想在所有测试中共享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,dbf) { }
[Fact]
public void fact(){}
}
但是当我运行测试时,会创建两个DBfixture对象(每个测试类一个)。没有收集,将创建四个对象。如何设置此对象,以便在所有测试类之间共享一个对象?
解决方法
您可以使用集合固定装置,并在该集合下添加每个测试,以实现上述目的。但是,如果您使用单个采集夹具,那么除非您在Xunitrunner配置中明确禁用它,否则整个测试将以串行方式运行。
Xunit Docs的要点之一: 测试集合还影响xUnit.net在并行运行测试时运行测试的方式。
有关更多详细信息,请阅读: https://xunit.net/docs/shared-context
替代方法是,使用静态类存储您可以在启动测试时分配的数据库上下文,并在整个测试生命周期中使用它。