首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使JBehave与预期驱动的API很好地工作呢?

如何使JBehave与预期驱动的API很好地工作呢?
EN

Stack Overflow用户
提问于 2015-09-16 17:05:15
回答 1查看 432关注 0票数 2

编写BDD场景的传统方法是:

代码语言:javascript
运行
复制
 Given [some preconditions]
 When [My code runs]
 Then [some stuff happened]

但是,我正在使用一个类似模拟的API,它希望在运行测试代码之前定义期望(即“发生了一些事情”)。为了同情API,我必须这样写我的故事:

代码语言:javascript
运行
复制
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的“捕获”特性将调用存储到字段中,并检查“然后”步骤中的调用。
  • ..。或者让"When“步骤设置一个字段,告诉AfterScenario步骤运行我的代码,因此将其推迟到设置了期望之后(但阻止我检查其他的后置条件)。

我真正想要的是让JBehave看看当时的步骤,找出它们中设定期望的部分,并在何时之前运行这些步骤。

Spock通过它的模拟(注释显示执行顺序)实现了这一点:

代码语言:javascript
运行
复制
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做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-17 16:22:43

奇怪的是,JBehave 1.0是第一个BDD工具,它曾经有自己的模拟框架,并且习惯于以与相同的方式运行。太恶心了。真的,非常讨厌(从BDD的角度;从“严格的模拟”测试的角度来看,这是很好的)。

这种模式是当时任何模拟框架工作的唯一方式,并导致了Mockito和其他“不错”的模拟框架的发明(以及将上述的模拟框架从JBehave 2.0中删除,因为它已经不再需要了)。

因此,如果Mockito不为您工作,那么“整洁的模式”就是编写您自己的模拟框架。不那么整洁的模式是编写自己的BDD框架。拥有一个与现实相匹配的模拟框架通常更简单,海事组织。

或者,您可能会发现您正在使用的模拟框架具有“很好”的模式,或者允许您声明存根而不是模拟,这可能会有所帮助。如果不知道您使用的是哪个框架,就很难分辨。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32614640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档