并非在每次测试时都运行xUnit IClassFixture

时间:2020-02-04 09:48:03

标签: xunit

根据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);
    }

但是也许我读错了吗?

是否不应该在每次运行测试时创建新的固定装置?

谢谢

1 个答案:

答案 0 :(得分:1)

请注意,MyDatabaseTests是您的测试类,而DatabaseFixture是您要实例化一次并传递给每个测试的类的实例

在MyDatabaseTests中的第一个测试运行之前,xUnit.net将 创建DatabaseFixture的实例

然后

对于每个测试,它将创建一个MyDatabaseTests的新实例,并且 将DatabaseFixture的共享实例传递给构造函数

将:为每个测试xUnit创建一个新的测试类实例,并传递已经创建的夹具实例

另一种方法

MyDatabaseTests => TransportSequenceResourceAggregateServiceTests
DatabaseFixture => TransportSequenceResourceAggregateServiceFixture

因此灯具只能创建一次。