How to combine AutoDataAttribute with InlineData
Asked Answered
F

2

44

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?

Fertilize answered 11/5, 2016 at 17:9 Comment(1)
See also AutoFixture, xUnit.net, and Auto Mocking.Franzoni
T
62

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.

Tamratamsky answered 11/5, 2016 at 17:30 Comment(3)
See also blog.nikosbaxevanis.com/2011/08/25/…Shofar
I got an exception when utilizing the above snippet. The following, instead, seems to be up to date with current Nunit features: public InlineAutoMoqDataAttribute(params object[] objects) : base(() => new Fixture().Customize(new AutoMoqCustomization()), objects)Lorylose
The answer is a bit outdated, since there is no class AutoMoqDataAttribute anymore. Up to date version is: public InlineAutoMoqDataAttribute(params object[] objects) : base(new AutoDataAttribute(), objects) { }. So, instead of AutoMoqDataAttribute AutoDataAttribute should be used.Barbel
P
7

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

Pavlish answered 22/3, 2022 at 10:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.