I have a sample class Plant, which has function 'bool IsEqual(Plant plant);'. We will create a Theory test for it.
[Theory]
[ClassData(typeof(IsEqualTestData))]
public void IsEqual(Plant plant1, Plant plant2, bool expectedResult)
{
Assert.Equal(expectedResult, plant1.IsEqual(plant2));
}
Class IsEqualTestData is a ClassData used with complex type Plant. It generates a list of arrays of 3 objects Plant1, Plant2, and ExpectedResult boolean.
private class IsEqualTestData : IEnumerable<object[]>
{
private readonly List<object[]> _data = new List<object[]>
{
new object[]
{
new Plant()
{
Name = PlantTester.PlantName1,
Description = PlantTester.PlantDescription1
},
new Plant()
{
Name = PlantTester.PlantName2,
Description = PlantTester.PlantDescription2
},
false
},
new object[]
{
new Plant() { Name = PlantTester.PlantName1 },
new Plant() { Name = PlantTester.PlantName1 },
true
},
new object[]
{
new Plant()
{
Name = PlantTester.PlantName1,
Description = PlantTester.PlantDescription1
},
new Plant()
{
Name = PlantTester.PlantName2,
Description = PlantTester.PlantDescription1
},
true
}
};
public IEnumerator<object[]> GetEnumerator()
{
return _data.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
When running in xUnit it will report result of running each entry in the test.
If you are using Visual Studio you can download snippet file from github repository.
Reference:
xUnit_ClassData.snippet
Using dotnet watch test for continuous testing with .NET Core and XUnit.net - Scott Hanselman