Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 341
zlZimon Avatar asked May 11 '16 17:05

zlZimon


2 Answers

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.

like image 112
Marcio Rinaldi Avatar answered Nov 13 '22 11:11

Marcio Rinaldi


With the latest AutoFixture, you can use 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).

like image 4
bonzaster Avatar answered Nov 13 '22 09:11

bonzaster