2023/11/05 - Coenraad Stijne
NUnit
supports Combinatorial Parameters natively, via the ValuesAttribute.xUnit
can support Combinatorial Parameters via a third party package: Xunit.Combinatorial.MSTest
does not have native or third party support for Combinatorial Parameters.This post will reimplement NUnit's
attributes [Values]
, [Combinatorial]
and [Sequential]
for MSTest
and xUnit
.
It is reusing a lot of code from Xriuk’s answer on StackOverflow.
This post only shows the end result, for implementation see the Code Examples
Framework | Version |
---|---|
MSTest | 3.1.1 |
NUnit | 4.5.0 |
xUnit | 2.6.1 |
This shows the end result, view the Code Examples for implementation.
[TestClass]
public class TestMethods
{
[TestMethod, Combinatorial]
public void EnumIterationTestMethod(Season season) => Console.WriteLine(season);
[TestMethod, Combinatorial]
public void BoolIterationTestMethod(bool boolean) => Console.WriteLine(boolean);
[TestMethod, Combinatorial]
public void CombinatoralValuesIterationTestMethod(Season season, bool boolean) => Console.WriteLine($"{season} {boolean}");
[TestMethod, Sequential]
public void SequentialCombinatoralIterationTestMethod(
[Values(1, 2, 3)] int param1,
[Values("A", "B")] string param2) => Console.WriteLine($"{param1} {param2 ?? "null"}");
[TestMethod, Combinatorial]
public void CombinatoralIterationTestMethod(
[Values(1, 2, 3)] int param1,
[Values("A", "B")] string param2) => Console.WriteLine($"{param1} {param2 ?? "null"}");
}
NUnit supports Combinatorial values natively.
public class Tests
{
[Test]
public void EnumIterationTest([Values] Season season) => Console.WriteLine(season);
[Test]
public void BoolIterationTest([Values] bool boolean) => Console.WriteLine(boolean);
[Test]
public void CombinatoralValuesIterationTest([Values] Season season, [Values] bool boolean) => Console.WriteLine($"{season} {boolean}");
[Test, Sequential]
public void SequentialCombinatoralIterationTest(
[Values(1, 2, 3)] int param1,
[Values("A", "B")] string param2) => Console.WriteLine($"{param1} {param2 ?? "null"}");
[Test, Combinatorial]
public void CombinatoralIterationTest(
[Values(1, 2, 3)] int param1,
[Values("A", "B")] string param2) => Console.WriteLine($"{param1} {param2 ?? "null"}");
}
This shows the end result, view the Code Examples for implementation.
public class UnitTest1
{
[Theory, Combinatorial]
public void EnumIterationTest(Season season) => Console.WriteLine(season);
[Theory, Combinatorial]
public void BoolIterationTest(bool boolean) => Console.WriteLine(boolean);
[Theory, Combinatorial]
public void CombinatoralValuesIterationTest(Season season, bool boolean) => Console.WriteLine($"{season} {boolean}");
[Theory, Sequential]
public void SequentialCombinatoralIterationTest(
[Values(1, 2, 3)] int param1,
[Values("A", "B")] string param2) => Console.WriteLine($"{param1} {param2 ?? "null"}");
[Theory, Combinatorial]
public void CombinatoralIterationTest(
[Values(1, 2, 3)] int param1,
[Values("A", "B")] string param2) => Console.WriteLine($"{param1} {param2 ?? "null"}");
}