I like to use the TestCaseSource attribute provided by NUnit, when writing such tests. I believe these tests are referred to as Data Driven Tests.
Here is how my version of your test would look like:
public class TestClass
{
public enum ABigEnum
{
A,
B,
C,
D
}
public IEnumerable TestValues
{
get
{
yield return new TestCaseData(ABigEnum.A, false).SetName("Assert A");
yield return new TestCaseData(ABigEnum.B, false).SetName("Assert B");
yield return new TestCaseData(ABigEnum.C, false).SetName("Assert C");
yield return new TestCaseData(ABigEnum.D, true).SetName("Assert D");
}
}
[Theory]
[TestCaseSource(typeof(TestClass), "TestValues")]
public void Test(ABigEnum enumValue, bool assertValue)
{
//generate someValue based upon enumValue
Assert.That(enumValue, Is.EqualTo(assertValue), "an amazing assertion message");
}
}
Edit 1
Actually, you can use Datapoint
attribute with Theory
. Something like this:
public enum ABigEnum
{
A,
B,
C,
D
}
[Datapoint]
public Tuple<ABigEnum, bool>[] TestValues = new[]
{
new Tuple<ABigEnum, bool>(ABigEnum.A, false), new Tuple<ABigEnum, bool>(ABigEnum.B, false),
new Tuple<ABigEnum, bool>(ABigEnum.C, false), new Tuple<ABigEnum, bool>(ABigEnum.D, true)
};
[Theory]
public void Test(Tuple<ABigEnum,bool> data)
{
//generate someValue based upon enumValue
Assert.That(data.Item1, Is.EqualTo(data.Item2), "an amazing assertion message");
}