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

时间:2019-08-12 14:32:54

标签: xunit.net autofixture automoq

我已经开始尝试使用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);
    ...
}

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的可行方案。感觉像是一种变通方法,但它为我完成了工作。

[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)
    {

    }
}