根据IClassFixture https://xunit.net/docs/shared-context的文档,它显示为
“”在运行MyDatabaseTests中的第一个测试之前,xUnit.net将创建一个DatabaseFixture实例。对于每个测试,它将创建一个新的MyDatabaseTests实例,并将共享的DatabaseFixture实例传递给构造函数。”
我凝视着“对于每个测试”部分。因为,至少在我的代码中,它仅调用一次继承的灯具。
public class TransportSequenceResourceAggregateServiceTests : IClassFixture<TransportSequenceResourceAggregateServiceFixture>
{
private TransportSequenceResourceAggregateServiceFixture fixture;
public TransportSequenceResourceAggregateServiceTests(TransportSequenceResourceAggregateServiceFixture fixture)
{
this.fixture = fixture;
}
[Fact]
public void If_No_Aggregate_Exist_Return_Null()
{
var sut = fixture.transportSequenceResourceAggregateService;
var aggrate = sut.Get("some_new_resource");
Assert.True(aggrate == null);
}
[Fact]
public void If_Resource_Does_Not_Exists_Create_New_Aggreagate()
{
var sut = fixture.transportSequenceResourceAggregateService;
var aggrate = sut.Create("some_new_resource");
Assert.True(aggrate.ResourcePosition == null);
Assert.True(aggrate.TransportSequences == null);
}
但是也许我读错了吗?
是否不应该在每次运行测试时创建新的固定装置?
谢谢
答案 0 :(得分:1)
请注意,MyDatabaseTests
是您的测试类,而DatabaseFixture
是您要实例化一次并传递给每个测试的类的实例
在MyDatabaseTests中的第一个测试运行之前,xUnit.net将 创建DatabaseFixture的实例。
然后
对于每个测试,它将创建一个MyDatabaseTests的新实例,并且 将DatabaseFixture的共享实例传递给构造函数
将:为每个测试xUnit创建一个新的测试类实例,并传递已经创建的夹具实例
另一种方法
MyDatabaseTests => TransportSequenceResourceAggregateServiceTests
DatabaseFixture => TransportSequenceResourceAggregateServiceFixture
因此灯具只能创建一次。