【问题标题】:How can I inject constructor arguments into a collection fixture?如何将构造函数参数注入集合夹具?
【发布时间】:2019-08-30 22:59:11
【问题描述】:

我正在尝试实现一个collection fixture,其中夹具需要执行的工作(在其构造函数中)需要一个参数。我希望夹具是通用的/可重复使用的,并且它需要知道被测试单元的组装。

如何参数化集合夹具,以便集合中的测试可以为夹具提供此“上下文”?

【问题讨论】:

  • 我相信这是不可能通过构造函数参数实现的。参见例如this GitHub thread。它还推荐了一种解决方法:从文件中读取配置。或类似的。

标签: xunit xunit.net


【解决方案1】:

我最终创建了一个抽象集合夹具,它带有一个受保护的构造函数,该构造函数采用必要的参数(在我的例子中,Assembly)。然后,我定义了具有无参数构造函数的小型子类,该构造函数使用正确的参数调用继承的构造函数。

public abstract class BaseCollectionFixture<TFixture> : ICollectionFixture<TFixture>
    where TFixture : class
{

    protected BaseCollectionFixture(Assembly assemblyUnderTest)
    {
        // Do my fixture stuff with the assembly
    }
}


[CollectionDefinition("Special tests")
public class ConcreteFixture : BaseCollectionFixture<ConcreteFixture>
{
    public ConcreteFixture() : base(typeof(MyClassUnderTest).Assembly) {}
}

然后我在这样的测试中使用它:

public MyClassTests<ConcreteFixture> { ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 2018-02-25
    • 2011-10-17
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多