编写BDD场景的传统方法是:
Given [some preconditions]
When [My code runs]
Then [some stuff happened]
但是我正在使用一个类似于模拟的API,它希望在运行测试代码之前定义期望(即,#34;发生了一些事情")。为了对这个API表示同情,我必须写下这样的故事:
Given [some preconditions]
And [the expectation that some stuff is going to happen]
When [My code runs]
Then [the expectations I defined above were met]
我不想这样做。我可以看到围绕它的两种方式,我也不想做:
我真正喜欢的是JBehave查看Then步骤,找到设置期望的部分,然后在When之前运行。
Spock通过其模拟实现了这一点(评论显示执行顺序):
def translator = Mock(Translator)
void "test something" {
given:
testObj = new MyThing(translator) // 1
when:
def actual = testObj.run("foo") // 3
then:
1 * translator.process("foo") << "bar" // 2 (setup)
// and 4 (post-check)
actual == "bar" // 5
}
是否有一个简洁的模式让JBehave这样做?
答案 0 :(得分:1)
奇怪的是,第一个BDD工具JBehave 1.0曾经拥有自己的模拟框架,并且过去的行为方式与Spock相同。这很讨厌。真的,真的很讨厌(从BDD的角度来看;从严格的模拟&#34;测试的角度看它很好)。
模式是当时任何模拟框架工作的唯一方式,并导致Mockito的发明和其他的#34; nice&#34;模拟框架(以及从JBehave 2.0中删除上述模拟框架,因为它不再需要)。
所以,&#34;整洁的模式&#34;如果Mockito没有为你完成这项工作,那就是编写自己的嘲弄框架。不那么简洁的模式是编写自己的BDD框架。拥有一个与现实相匹配的模拟框架通常更简单的IMO。
或者,你可能会发现你正在使用的模拟框架有一个很好的&#34;模式或允许您声明存根而不是模拟,这可能会有所帮助。不知道你使用哪个框架很难说。