Java 的 BDD 框架之间有什么区别?

对于 Java 来说,每个 行为驱动的发展(BDD)框架的优点和缺点是什么?

I've found some of them 给你, for example.

如果我已经使用了一个模仿库(例如 莫基托) ,那么使用 BDD 框架是否有意义?

46853 次浏览

我最初使用普通的 jUnit 来完成 BDD,但是最近我一直在研究 JDave,因为它与我使用 jUnit 所完成的工作几乎是1:1。它也运行在 jUnit 之上,所以它已经可以在 Eclipse 上工作,而且很容易配置为可以在 Hudson 这样的持续集成系统上工作。我不能和其他人比较,但是我和 JDave 的经历到目前为止还不错。

哦,还有,使用模拟器从来都不是一个愚蠢的主意!它们并没有特别地绑定到 TDD/BDD 上,它们的目的是减轻测试的负担。

哇,我看到话题很热门,很多好答案..。

具有讽刺意味的是,我最近发现了 BDD,并发现这个概念很有趣。嘿,它强制编写两个测试... 和规范!尽管看起来可能令人惊讶,但后者在某些项目中也可能缺失... ... 或者只是缺乏 BDD 强制引入的精确性。

行为驱动的发展文章总结了这个概念,并提供了一些好文章的链接(比如 Andrew Glover 撰写的文章)。此外,对于这个线程的主题,它提供了一个相当全面的(我认为) BDD 框架列表,其中有很多是用于 Java 的。
这虽然不能解决框架的选择问题,但至少可以方便搜索。

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

My team have been using JBehave for some time. It uses plain text files to store specifications. Every step (Given, When, Then) is then executed by a certain method which can extract parameters from the step. Scenarios can be indented and well formatted which helps a lot if clients want to verify them.

也有一些问题。我们已转用 Java6。有时在执行过程中会忽略一些场景步骤。找出窃听器的位置可能会有很多麻烦。

在 Java 中使用的最好的 BDD 框架是什么? 为什么? 每个框架的优缺点是什么?

这里有一个关于 Concordion vs. Cucumber and Java based Acceptance Testing的有趣链接

I've found couple of them here, but I'm not sure which one to choose.

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

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

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

My team have used JBehave with success - we moved to it after using EasyB and found the plain text scenario files easier to deal with.

我刚刚比较了三个用于 Java 的 BDD 框架,显然我的发现有一个相当短的使用期限。

协和式

  • 非常灵活
  • Very pretty report output
  • 不错的插件框架
  • 缺乏文档记录。我必须阅读源代码才能弄清楚(幸运的是,它的质量非常好)。
  • Fixture 似乎最终会与 html 紧密耦合。

简单 B

  • 非常浅的学习曲线(即使对于非 Groovy 开发人员)
  • 非常强大的 DBUnit 集成
  • 显然不支持参数(导致非常模糊的故事或文本和代码之间的重复(编辑: 实际上有,但它的文档非常隐藏)
  • 故事和代码是紧密耦合的(相同的文件)
  • 非常基本的报告输出
  • Couldn't get IntelliJ plugin to work
  • 不活跃的社区(Maven 插件看起来已经坏了三个月了——没有多少可以利用的代码示例)

注意言行

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

我没有机会尝试 Cuke4Duke 的 JDave,因为我想,但可能会推动 JBehave 在这个时候。

“利与弊”对不同的人来说可能是不同的东西。我通常会看一看

  • 开发活动 ,例如,可能有新版本或最后一个版本已有2年历史。
  • 成熟度 ,例如,它已经存在多久了,有没有教程,甚至可能有书籍。(我不读这些书,这只是领养的标志。)
  • 工具支持 ,例如是否有 Eclipse 插件、 Ant 支持等等
  • 依赖项的大小 ,我不喜欢拥有自己所有东西的框架。我想自己选择我的嘲笑框架。
  • kind of license, this is important for me because of legal terms in the company I work for.
  • compatibility with related tools, e.g. does it use Gherkin language or not.

从一些框架我看了一下

  • 本能 很糟糕: 最后活动2010年3月,很好: ASF 许可证
  • JDave 很糟糕: 带有匹配器和模拟器,很好: 最后活动2011年1月,ASF 许可证
  • Easyb 很糟糕: last activity 2010年10月,not sure: 它使用 Groovy。这可能没问题,但对我来说,这是个领养的问题。
  • Beanspec 很糟糕:2007年只有一个版本,这个已经死了
  • Bdoc 很糟糕: 最后一个活动2010年1月,不确定: 看起来好像走了另一条路,从代码创建一个报告。
  • spock 很糟糕: maybe a bit extreme, this is a complete testing framework, not only BDD, 很好: very active, very cool.
  • Jact ,Java 中所有 BDD 的“母亲”,很糟糕: 非常强大 = 复杂,不兼容的许可(对我来说) ,几乎与每个测试库和更多的东西一起出现,很好: 基于 RSpec,因此兼容,Eclipse 插件,maven 集成,非常活跃的社区
  • Ginkgo4j ,一个用于 Java 的 BDD 框架,也基于 Ruby 的 RSpec,但是使用 Java lambda (而不是注释)来允许您创建高上下文关联、高可读性的测试。很简单。非常强大。开源 Apache2许可证。

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

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

Cucumber-JVM Example in Eclipse 4.2

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

结果