编写BDD场景的传统方法是:
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]
我不想那样做。我可以看到两种类似的方法,我也不想这样做:
我真正想要的是让JBehave看看当时的步骤,找出它们中设定期望的部分,并在何时之前运行这些步骤。
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做到这一点吗?
发布于 2015-09-17 08:22:43
奇怪的是,JBehave 1.0是第一个BDD工具,它曾经有自己的模拟框架,并且习惯于以与相同的方式运行。太恶心了。真的,非常讨厌(从BDD的角度;从“严格的模拟”测试的角度来看,这是很好的)。
这种模式是当时任何模拟框架工作的唯一方式,并导致了Mockito和其他“不错”的模拟框架的发明(以及将上述的模拟框架从JBehave 2.0中删除,因为它已经不再需要了)。
因此,如果Mockito不为您工作,那么“整洁的模式”就是编写您自己的模拟框架。不那么整洁的模式是编写自己的BDD框架。拥有一个与现实相匹配的模拟框架通常更简单,海事组织。
或者,您可能会发现您正在使用的模拟框架具有“很好”的模式,或者允许您声明存根而不是模拟,这可能会有所帮助。如果不知道您使用的是哪个框架,就很难分辨。
https://stackoverflow.com/questions/32614640
复制