如何解决如何在所有测试类别中共享一种装置?
我想在所有测试中共享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
替代方法是,使用静态类存储您可以在启动测试时分配的数据库上下文,并在整个测试生命周期中使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。