我已经看到在我看来是 BDD 的两种方法。差异取决于“何时”的位置:
在方法 1 中,when 是规范的一部分:
AnEmptyStack.isNoLongerEmptyAfterPush
在纯粹的“当时给定”的术语中,这是:
“给定一个空栈,当它被压入时,它就不再是空的了。”
所以“何时”是规范方法的一部分:
isNoLongerEmptyAfterPush(){
stack.push(anObject);
Assert.notEmpty(stack);
}
在方法 2 中,何时在类级别定义。也就是说,通常在设置中调用when。
class WhenAnEmptyStackIsPushed(){
setup(){
stack.push();
}
public void thenItIsNotEmpty(){
assert(stack.notEmpty())
}
}
有首选方法吗?就行为的纯测试而言,第二种选择对我来说似乎更可取,因为测试夹具的重点是行为。
但是,为了便于测试,我倾向于第一种方法。我在测试中发现的大部分痛苦是设置。也就是说,我必须得到一个处于特定状态的 SUT。一旦处于该状态,通常只有一行代码可以实际调用它的某些行为。因此,每个类(即每个设置上下文)具有多个行为会利用类的一次性设置。
所以,我正在寻找想法。一种方法优于另一种方法吗?