私は、BDD への 2 つのアプローチのように思われることを見てきました。違いは、「いつ」の場所にかかっています。
アプローチ 1 では、when は仕様の一部です。
AnEmptyStack.isNoLongerEmptyAfterPush
純粋な「その時与えられた」用語では、これは次のとおりです。
「空のスタックが与えられた場合、それがプッシュされると、空ではなくなります。」
したがって、「いつ」は指定方法の一部です。
isNoLongerEmptyAfterPush(){
stack.push(anObject);
Assert.notEmpty(stack);
}
アプローチ 2 では、when はクラス レベルで定義されます。つまり、 when は通常、セットアップで呼び出されます。
class WhenAnEmptyStackIsPushed(){
setup(){
stack.push();
}
public void thenItIsNotEmpty(){
assert(stack.notEmpty())
}
}
好ましい方法はありますか?動作の純粋なテストに関しては、テスト フィクスチャの焦点が動作にあるため、2 番目のオプションが望ましいと思われます。
ただし、テストを簡単にするために、最初の方法に傾いています。私がテストで見つけた苦労のほとんどはセットアップです。つまり、特定の状態で SUT を取得する必要があります。その状態になると、通常、実際に何らかの動作を呼び出すコードは 1 行だけです。そのため、クラスごと (つまり、セットアップ コンテキストごと) に複数の動作を設定すると、クラスの 1 回限りのセットアップが活用されます。
だから、私は考えを探しています。1 つのアプローチが他のアプローチよりも優先されますか?