【问题标题】:xUnit IClassFixture is not run at every testxUnit IClassFixture 并非在每次测试时都运行
【发布时间】:2020-02-04 17:56:06
【问题描述】:

根据 IClassFixture https://xunit.net/docs/shared-context 的文档,它说

"在 MyDatabaseTests 中的第一个测试运行之前,xUnit.net 将创建一个 DatabaseFixture 实例。对于每个测试,它将创建一个新的 MyDatabaseTests 实例,并将 DatabaseFixture 的共享实例传递给构造函数。”

我盯着“For each test”部分。因为,它只调用了一次继承的fixture,至少在我的代码中是这样。

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

但也许我读错了?

难道不应该在每次运行测试时都创建一个新的fixture 吗?

谢谢

【问题讨论】:

    标签: xunit


    【解决方案1】:

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

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

    然后

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

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

    另一种方法

    MyDatabaseTests => TransportSequenceResourceAggregateServiceTests
    DatabaseFixture => TransportSequenceResourceAggregateServiceFixture

    所以fixture只会被创建一次。

    【讨论】:

    • 我创建了 DatabaseFixture 并在调试它时发现,在每个测试用例完成时都会调用 dispose 方法。所以你怎么能说夹具只创建一次。另外,即使您的观点是正确的,这如何完成共享实例的要求...因为当为每个测试方法创建测试类的新实例时...每个对象都会被分配?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多