次のいずれかを意味します。
- 最初にテストを作成せずに(「宗教的なTDD」の違反)、目的の機能を満たす生産コードを作成した、または
- 必要な機能はたまたま生産コードによってすでに実現されており、その機能をカバーする別の単体テストを書いているだけです。
後者の状況は、思っているよりも一般的です。完全に正真正銘の些細な(しかしまだ説明的な)例として、次の単体テスト(私は怠け者であるため、擬似コード)を書いたとしましょう。
public void TestAddMethod()
{
Assert.IsTrue(Add(2,3) == 5);
}
本当に必要なのは、2と3を加算した結果だけだからです。
実装方法は次のとおりです。
public int add(int x, int y)
{
return x + y;
}
しかし、4と6を一緒に追加する必要があるとしましょう。
public void TestAddMethod2()
{
Assert.IsTrue(Add(4,6) == 10);
}
メソッドはすでに2番目のケースをカバーしているので、メソッドを書き換える必要はありません。
ここで、Add関数が実際にある程度の上限がある数値(100など)を返す必要があることがわかったとしましょう。これをテストする新しいメソッドを作成できます。
public void TestAddMethod3()
{
Assert.IsTrue(Add(100,100) == 100);
}
そして、このテストは失敗します。関数を書き直さなければなりません
public int add(int x, int y)
{
var a = x + y;
return a > 100 ? 100 : a;
}
それを通過させる。
常識は、
public void TestAddMethod2()
{
Assert.IsTrue(Add(4,6) == 10);
}
合格した場合、テストに合格するための新しいコードを作成できるように、テストが失敗するようにメソッドを意図的に失敗させることはありません。