Java的BDD框架有什么区别?

时间:2009-07-01 12:04:55

标签: java bdd

每个Behavior Driven Development(BDD)Java框架的优缺点是什么?

我发现其中一些here,例如。

如果我已经使用了模拟库(例如Mockito),那么使用BDD框架是否有意义?

8 个答案:

答案 0 :(得分:97)

我刚刚完成了针对Java的三个BDD框架的比较。显然,我的研究结果的使用期限相当短。

Concordion

  • 非常灵活
  • 非常漂亮的报告输出
  • 不错的插件框架
  • 记录不完整。我不得不阅读消息来源来解决它(幸运的是它的质量非常好)。
  • 灯具似乎最终与html紧密耦合。

EasyB

  • 非常浅的学习曲线(即使对于非Groovy开发人员)
  • 极其强大的DBUnit集成
  • 显然不支持参数(导致非常模糊的故事或文本和代码之间的重复(编辑:实际上有,但它的文档被很好地隐藏了。)
  • 故事和代码紧密耦合(同一文件)
  • 非常基本的报告输出
  • 无法使IntelliJ插件正常工作
  • 非活动社区(Maven插件似乎已经被打破了三个月 - 没有多少代码示例可供使用)

JBehave

  • 极其强大和灵活(例如通过故事构成减少锅炉板作为先决条件)
  • 广泛的(如果是碎片化的)文档和示例
  • 对不同框架和环境的广泛支持(如果压倒性)
  • 故事文件与代码的完美分离
  • 看起来有一个非常活跃的社区,更多的例子和在网上讨论它。
  • 相当陡峭的学习曲线(比Concordion / EasyB花了3-4倍才算出来)

我没有机会像我希望的那样尝试使用JDave的Cuke4Duke,但此时可能会推送JBehave。

答案 1 :(得分:34)

"利弊"对不同的人来说可能是不同的事情。我经常看看

  • 开发活动,例如可能是新版本,也可能是2年前的最新版本。
  • 成熟度,例如它有多长时间,是否有教程甚至可用的书籍。 (我不会读这些书,这只是收养的标志。)
  • 工具支持,例如是否有Eclipse插件,Ant支持等
  • 依赖项的大小,我不喜欢随附自己的所有内容的框架。例如我想自己选择我的模拟框架。
  • 许可类型,这对我来说非常重要,因为我所在公司的法律条款。
  • 与相关工具的兼容性,例如它是否使用Gherkin语言。

从某些框架我看了

  • Instinct 错误:上次活动2010年3月,良好:ASF许可
  • JDave 错误:带有匹配器和模拟器,良好:上次活动2011年1月,ASF许可证
  • easyb 错误:上次活动2010年10月,不确定:它使用Groovy。这可能没问题,但在我的案例中可能会出现问题。
  • beanspec 错误:2007年只有一个版本,已经死了
  • bdoc 错误:上次活动2010年1月,不确定:它看起来像是走另一条路,创建报告来自代码。
  • spock 糟糕:可能有点极端,这是一个完整的测试框架,不仅是BDD,:非常活跃,非常酷。
  • jbehave ,"母亲" Java中的所有BDD,错误:非常强大=复杂,不兼容的许可证(对我来说),几乎每个测试库都有,还有更多,:基于RSpec和因此兼容,eclipse插件,maven集成,非常活跃的社区
  • ginkgo4j ,Java的BDD框架也基于Ruby的RSpec,但使用Java lambda(而不是注释)允许您创建高度上下文,高度可读的测试。简单。很强大。开源Apache 2许可证。

关于模拟:你肯定也需要一个模拟框架。 BDD框架只是帮助您编写规范,但有些测试需要模拟或存根,尤其是。当你自上而下设计时(从概述到细节)。

答案 2 :(得分:19)

  

与Java一起使用的最佳BDD框架是什么?为什么?每个框架的优缺点是什么?

以下是关于Concordion vs. Cucumber and Java based Acceptance Testing

的有趣链接
  

我在这里找到了几个,但我不确定选择哪一个。

真的,看看上面提到的那个。

  

如果我已经使用了模拟库(例如Mockito),那么使用BDD框架是否有意义?

简短的回答:是的,当然。实际上,使用BDD框架进行验收测试并使用模拟对象单独进行单元测试是如此不同,以至于我没有真正得到问题。验收测试是黑盒测试,测试用于验证业务功能是否正常工作,并且理想情况下由业务分析师编写。使用模拟隔离的单元测试是白盒测试,测试用于验证单元是否正常工作并由开发人员编写。两者都很有用,但它们的用途完全不同。换句话说,使用Mockito根本不会取代BDD框架,反之亦然。

答案 3 :(得分:6)

我最初用简单的jUnit做了我的BDD,但最近我一直在看JDave,因为它与我用jUnit做的几乎是1:1。它还运行在jUnit之上,因此它已经可以在Eclipse上运行,并且也很容易配置为在Hudson等持续集成系统上运行。无法与其他人进行比较,但到目前为止,我对JDave的经验一直很好。

哦,使用嘲笑绝不是一个愚蠢的想法!它们没有特别与TDD / BDD相关联,它们的目的是减轻测试的负担。

答案 4 :(得分:5)

哇,我看到主题很热,很多好的答案......

除了反讽之外,我最近发现了BDD并发现这个概念很有趣。嘿,它强制写两个测试......和规格!虽然看起来很令人惊讶,但后者在某些项目中也可能缺失......或者只是缺乏BDD强制引入的精确度。

Behavior Driven Development文章总结了一些好文章的概念和链接(如Andrew Glover撰写的文章)。此外,对于这个主题的主题,它给出了一个相当全面的(我想)BDD框架列表,其中很多都是针对Java的。 它没有解决选择框架的问题,但至少它会简化搜索......

由于BDD在很大程度上依赖于测试代码的可读性,我认为一个好的选择标准是查看快速导览/教程,看看哪一个看起来更适合你的风格。 其他标准可能是框架利用您熟悉的工具(单元测试,模拟),IDE使用等等。

答案 5 :(得分:3)

我的团队已经使用JBehave一段时间了。它使用纯文本文件来存储规范。然后,每个步骤(Given,When,Then)由某个方法执行,该方法可以从步骤中提取参数。场景可以缩进和格式良好,如果客户想要验证它们会有很多帮助。

也有一些问题。我们已切换到Java 6.有时在执行期间会忽略某些方案步骤。找出错误的位置可能会造成很多麻烦。

答案 6 :(得分:3)

我的团队已经成功使用了JBehave - 我们在使用EasyB后转移到它,并发现纯文本场景文件更容易处理。

答案 7 :(得分:3)

我试过Cucumber-JVM(以前开发为Cuke4Duke)。 它使用Gherkin DSL作为规范,以纯文本形式存储。

Cucumber-JVM Example in Eclipse 4.2

它可以作为JUnit测试运行。因此,开始使用的唯一问题是让业务人员或产品经理在源代码中读/写.features。

结果