Search code examples
c#unit-testingxunitautofixture

How to combine AutoDataAttribute with InlineData


I heavily use the Autofixture AutoData Theories for creating my data and mocks. However this prevents me from using the InlineData Attributes from XUnit to pipe in a bunch of different data for my tests.

So I am basically looking for something like this:

[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
}

Is something like this possible?


Solution

  • You'll have to create your own InlineAutoMoqDataAttribute, similar to this:

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

    and you'd use it like this:

    [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
    }
    

    Note that the inlined data, the ints in this case, must be the first parameters of the test method. All the other parameters will be provided by AutoFixture.