如何将 AutoDataAttribute 与 InlineData 结合使用

How to combine AutoDataAttribute with InlineData

我大量使用 Autofixture AutoData Theories 来创建我的数据和模拟。然而,这阻止了我使用 XUnit 的 InlineData 属性为我的测试输入一堆不同的数据。

所以我基本上是在寻找这样的东西:

[Theory, AutoMoqDataAttribute]
[InlineData(3,4)]
[InlineData(33,44)]
[InlineData(13,14)]
public void SomeUnitTest([Frozen]Mock<ISomeInterface> theInterface,  MySut sut, int DataFrom, int OtherData)
{
     // actual test omitted
}

这样的事情可能吗?

您必须创建自己的 InlineAutoMoqDataAttribute,类似于:

public class InlineAutoMoqDataAttribute : InlineAutoDataAttribute
{
    public InlineAutoMoqDataAttribute(params object[] objects) : base(new AutoMoqDataAttribute(), objects) { }
}

你会像这样使用它:

[Theory]
[InlineAutoMoqData(3,4)]
[InlineAutoMoqData(33,44)]
[InlineAutoMoqData(13,14)]
public void SomeUnitTest(int DataFrom, int OtherData, [Frozen]Mock<ISomeInterface> theInterface, MySut sut)
{
     // actual test omitted
}

注意内联数据,本例中的整数,必须是测试方法的第一个参数。 所有其他参数将由 AutoFixture.

提供

使用最新的AutoFixture,可以使用Inline AutoData Theories

Uses the InlineData values for the the first method arguments, and then uses AutoData for the rest (when the InlineData values run out).