写BDD场景的传统方法是:我怎样才能使JBehave符合预期驱动的API很好地工作?
Given [some preconditions]
When [My code runs]
Then [some stuff happened]
然而当我想要的预期(也就是,“有些东西发生了”)下测试的代码之前定义的运行模拟类API工作。为了同情该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]
我不想那么做。我可以看到周围的两项缺憾的方式,这也是我真的不希望做的事情:
- 含蓄地设立“任何”中的一些“给定”步骤类型的期望,请使用“捕获”功能模拟API将调用隐藏到字段中,并在“Then”步骤中检查它们。
- ......或使“当”步骤设置的场告诉了AfterScenario步运行我的代码,因此它推迟到以后的预期已经设置(但阻止我检查其他后置)
我真的很想为JBehave看当时的步骤,找到他们的是设定预期的部分,和那些运行前的当。
斯波克达到这个与它的嘲笑(言论表明执行顺序):
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做到这一点?
感谢。我使用的“模拟”框架实际上是一个模拟REST服务; rest-client-driver,其中您告诉嵌入式Jetty需要预期的HTTP请求,所以我不能切换到Mockito。 – slim
@slim这里没有大量的代码。打赌你可以将它分叉并写出适合你在几天内做的事情。 – Lunivore