Ви повинні використовувати підхід, керований даними, з фабриками даних (в NUnit-говор, вони називаються джерелами тестових випадків ). Це робить ваші випробування набагато простішими для читання, розуміння, модифікації та підтримки (або, загалом, набагато більш чистим):
[TestFixture]
internal class ConstraintTests
{
static object[] TwoRanges =
{
new object[]
{
new[] { new Range(0, 10), new Range(20, 30), new Range(40, 50) },
new[] { new Range(1, 9), new Range(21, 29), new Range(41, 49), new Range(60, 70) }
}
};
static object[] ThreeRanges =
{
new object[]
{
new[] { new Range(0, 10), new Range(20, 30), new Range(40, 50) },
new[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) },
new[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) }
},
new object[]
{
new[] { new Range(0, 10), new Range(20, 30), new Range(40, 50), new Range(60, 70) },
new[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) },
new[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) }
}
};
[Test, TestCaseSource("TwoRanges")]
public void NarrowDown_WhenCalledWithTwoRanges_GivesTheExpectedResult(IEnumerable sut, IEnumerable context)
{
Constraint constraint = new Constraint(sut);
Constraint result = constraint.NarrowDown(new Constraint(context));
Assert.That(result, Is.Null);
}
[Test, TestCaseSource("ThreeRanges")]
public void NarrowDown_WhenCalledWithThreeRanges_GivesTheExpectedResult(IEnumerable sut, IEnumerable context, IEnumerable expected)
{
Constraint constraint = new Constraint(sut);
Constraint result = constraint.NarrowDown(new Constraint(context));
Assert.That(result, Is.Not.Null);
Assert.That(result.Bounds, Is.EquivalentTo(expected));
}
}
Подивіться, наскільки простішими стали ваші тестові методи? Крім того, це зроблять кожен набір даних з джерела вихідного тестового випадку запущені в окремому тесті, так що все це не збігатиметься лише тому, що один набір даних спричиняє збій. Пам'ятайте: тест повинен стверджувати лише одну речі.
HTH!