.NET TDD / BDDフレームワークのいずれかで優れたTDD設計手法(名前付け、行テストの使用、クラスの設計)に従うために、次の単体テストを改善できますか?
また、この(NUnit)の例のように、各行に対して個別の期待値を持つことができる行テストを行うためのより良い方法は、フレームワークのいずれかにありますか?
ここでテスト対象のシステムConstraint
は、有効な整数の複数の範囲を持つことができるクラスです。テストテストは、NarrowDown
別の制約に基づいて有効範囲を小さくできる方法をテストします。
[TestFixture]
internal class ConstraintTests
{
[Test]
public void NarrowDown_Works()
{
RowTest_NarrowDown(
new Range[] { new Range(0, 10), new Range(20, 30), new Range(40, 50) },
new Range[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) },
new Range[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) });
RowTest_NarrowDown(
new Range[] { new Range(0, 10), new Range(20, 30), new Range(40, 50), new Range(60, 70) },
new Range[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) },
new Range[] { new Range(1, 9), new Range(21, 29), new Range(41, 49) });
RowTest_NarrowDown(
new Range[] { new Range(0, 10), new Range(20, 30), new Range(40, 50) },
new Range[] { new Range(1, 9), new Range(21, 29), new Range(41, 49), new Range(60, 70) });
}
private static void RowTest_NarrowDown(IEnumerable<Range> sut, IEnumerable<Range> context)
{
Constraint constraint = new Constraint(sut);
Constraint result = constraint.NarrowDown(new Constraint(context));
Assert.That(result, Is.Null);
}
private static void RowTest_NarrowDown(IEnumerable<Range> sut, IEnumerable<Range> context, IEnumerable<Range> 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));
}
}