0

我已经开始尝试使用 AutoFixture。在我的研究中,我发现有InlineAutoDataAttribute一个可以用来生成具有不同输入参数的多个测试用例(给定一些要求)。但是,InlineAttribute同样InlineAutoDataAttribute只能处理编译const数据。所以我去寻找类似的东西MemberAutoDataAttribute,因为它MemberDataAttribute可以让我输入一个非“编译时常量”对象的集合,比如一个Exception实例的集合。可悲的是,这个属性不存在。

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

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

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

1 回答 1

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

    }
}
于 2019-08-16T09:41:33.307 回答