私はTDDに非常に慣れていません。TDD By Exampleを読んでいますが、「同じ定数を使用して複数のことを意味することは絶対にしないでください」と書かれており、Plus()
メソッドの例を示しています。
私の意見では、同じ定数値を使用するPlus(1、1)とPlus(1、2)の間に違いはありません。試験方法で同じ定数値を使用することの長所と短所を知りたいですか?
私はTDDに非常に慣れていません。TDD By Exampleを読んでいますが、「同じ定数を使用して複数のことを意味することは絶対にしないでください」と書かれており、Plus()
メソッドの例を示しています。
私の意見では、同じ定数値を使用するPlus(1、1)とPlus(1、2)の間に違いはありません。試験方法で同じ定数値を使用することの長所と短所を知りたいですか?
私はあなたがその声明を誤解していると思います。著者(imho)が伝えようとしているのは、次のコードは災害のレシピであるということです。
const SomeRandomValue = 32;
...
// Plus testcase
Plus(SomeRandomValue, SomeRandomValue)
...
// Divide testcase
Divide(SomeRandomValue, SomeRandomValue)
記述的でない定数を再利用する2つのテストケースがあります。SomeRandomValue
テストスイートに変更しても失敗することを知る方法はありませ0
ん。
より良い命名は次のようなものになります
const AdditionValue = 32;
const DivisorValue = 32;
...
// Plus testcase
Plus(AdditionValue, AdditionValue)
...
// Divide testcase
Divide(DivisorValue, DivisorValue)
定数が何のために使用されているかが明らかである必要があります。テストケースを作成するときにコードの再利用のアイデアにこだわる必要はありません。
または言い換えると:
複数のテストケースで定数を再利用することに何の問題もありません
DivisorValue
>しかし、コードの再利用という名目で、1つの値を説明のない変数にシューホーンしようとすると間違いなく何か問題があります。
テストで同じ値を使用すると(のようにPlus(1, 1)
)、コードが間違った理由で機能する可能性があります。Plus
これは、そのようなテストに合格するが、異なる値でテストに失敗する実装です。
public int Plus (int a, int b) {
return a + a;
}
このリスクを回避するテストは、これらのようなエラーをすり抜けさせるテストよりも優れたテストです。