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