AutoFixture 可以用来生成多个测试用例吗?

Can AutoFixture be used to generate multiple test cases?

我已经开始尝试使用 AutoFixture。在我的研究中,我发现有一个 InlineAutoDataAttribute 可以用来生成具有不同输入参数的多个测试用例(给定一些要求)。但是,InlineAttribute 和类似的 InlineAutoDataAttribute 只能用于编译 const 数据。所以我开始寻找类似 MemberAutoDataAttribute 的东西,因为 MemberDataAttribute 允许我输入非 'compile time const' 对象的集合,例如 Exception 实例的集合。遗憾的是,此属性不存在。

有没有什么方法可以重用使用 AutoFixture 的测试,以便它可以生成多个测试用例?这可以通过一些 ICustomization 实现来实现吗?

下面是我描述的情况的一个例子。请注意,MyCustomAutoDataAttribute 只是 AutoDataAttribute 的基本继承对象,它会导致 AutoMoqCustomization 为夹具配置。

[Theory, MyCustomAutoDataAttribute]
public void FooBar(Exception exception, [Frozen] ISomeInterface)
{
    ...
    ISomeInterface.Setup(i => i.SomeMethod()).Throws(exception);
    ...
}

我找到了解决问题的可行方法。这感觉像是一个解决方法,但它帮我完成了工作。

[Theory]
[MyCustomInlineAutoData(typeof(CustomException1))]
[MyCustomInlineAutoData(typeof(CustomException2))]
public void FooBar(Type exceptionType, [Frozen] Mock<ISomeInterface> interface, [Frozen] IFixture fixture)
{
    var exception = (Exception) new SpecimenContext(fixture).Resolve(exceptionType)
    interface.Setup(i => i.SomeMethod()).Throws(exception);
}

使用以下属性定义:

public class MyCustomInlineAutoData : InlineAutoDataAttribute
{
    public MyCustomInlineAutoData(params object[] values) : base(new MyCustomAutoDataAttribute(), values)
    {

    }
}