用于Java的BDD框架有什么区别?

Java的每个行为驱动开发 (BDD)框架的优缺点是什么?

例如,我在这里find了其中的一些。

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

我刚刚完成比较三个Java的BDD框架。 显然我的发现有一个相当短的使用date。

Concordion

  • 非常灵活
  • 非常漂亮的报告输出
  • 漂亮的插件框架
  • logging不完善 我不得不阅读源代码(幸运的是它的质量非常好)。
  • 夹具似乎最终会紧密结合到HTML。

easyb中

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

JBehave

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

我没有机会像JDave那样尝试JDave的Cuke4Duke,但是现在可能会推动JBehave。

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

  • 开发活动 ,例如可能是新版本,或者是2年前的最新版本。
  • 成熟 ,例如,它有多久,是否有教程,甚至可以提供书籍。 (我不读这些书,这只是收养的一个标志。)
  • 工具支持 ,例如是否有Eclipse插件,Ant支持等
  • 依赖的大小 ,我不喜欢随自己的一切而来的框架。 例如,我想自己select我的嘲笑框架。
  • 这种许可证对我来说很重要,因为我所在公司的法律条款。
  • 与相关工具的兼容性 ,例如它是否使用黄瓜语言。

从一些框架,我看看

  • 本能不好:上次活动2010年3月,好:ASF执照
  • JDave坏:与matchers和嘲笑,好:最后的活动2011年1月,ASF许可证
  • easyb不好:最后的活动2010年10月,不确定:它使用Groovy。 这可能是好的,但在我的情况下将是一个问题的采用。
  • beanspec坏:2007年只有一个版本,这是死的
  • bdoc糟糕:2010年1 月份的最后一项活动,不确定:看起来像另一种方式,从代码创build报告。
  • spock bad:也许有点极端,这是一个完整的testing框架,不仅BDD好,很活跃,很酷。
  • jbehave是所有BDD在Java中的“母亲”,很糟糕:非常强大=复杂,不兼容的许可证(对我来说),几乎包含了所有的testing库以及更多:基于RSpec的兼容的eclipse插件和maven集成,非常活跃的社区

关于嘲笑:你当然也需要一个嘲弄的框架。 BDD框架只是帮助你编写规范,但是一些testing需要模拟或者存根,特别是。 当你devise自上而下(从概览到细节)。

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

这里有一个有趣的链接关于Concordion与黄瓜和基于Java的验收testing

我在这里find了几个,但是我不确定select哪一个。

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

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

简短的回答:是的,绝对。 实际上,使用模拟对象隔离使用BDD框架和unit testing的验收testing是如此不同以至于我没有真正的问题。 验收testing是黑匣子testing,testing用于validation某个业务function是否正常工作,并且由业务分析师进行理想编写。 使用mock进行隔离的unit testing是白盒testing,使用testing来validation单元是否正在工作,并且是由开发人员编写的。 两者都是有用的丁,他们有完全不同的目的。 换句话说,使用Mockito根本不会取代BDD框架,反过来也是如此。

我原来是用普通的jUnit做了我的BDD,但是我最近一直在看JDave,因为它跟我在做的jUnit几乎是1:1。 它也运行在jUnit之上,所以它已经可以在Eclipse上运行,并且也可以很容易地configuration成像Hudson这样的持续集成系统。 不能真正与其他人比较,但我对JDave的经验迄今为止都不错。

噢,用嘲讽从来不是一个愚蠢的主意! 它们并不是专门与TDD / BDD绑定的,它们的目的是减轻一般testing的负担。

哇,我看到的话题很热,很多好的答案…

抛开讽刺,我最近发现BDD,发现这个概念很有趣。 嘿,它迫使写testing…和规格! 正如看起来似乎令人吃惊,后者在某些项目中也可能缺失……或者仅仅缺乏BDD力量引入的精度。

“ 行为驱动开发”文章总结了一些优秀文章的概念和链接(如Andrew Glover编写的文章)。 此外,对于这个线程的主题,它给出了一个相当全面(我想)的BDD框架的列表,其中很多是Java的。
它并没有解决select框架的问题,但至less它会缓解search…

由于BDD在很大程度上依赖于testing代码的可读性,所以我认为select一个好的标准就是看一下快速浏览/教程,看哪一个更适合你的风格。 其他标准可能是您熟悉的框架利用工具(unit testing,模拟),IDE的使用等等。

我的团队已经使用JBehave一段时间了。 它使用纯文本文件来存储规格。 然后,每一步(给定,当,然后)通过一定的方法执行,从而可以从步骤中提取参数。 场景可以缩进,格式良好,如果客户想validation它们,这将有很大的帮助。

也有一些问题。 我们已经切换到了Java 6.有时候一些场景步骤在执行时被忽略。 搞清楚错误在哪里可能会引起很大的麻烦。

我的团队成功地使用了JBehave,在使用EasyB之后,我们转向了它,发现了纯文本脚本文件更容易处理。

我尝试了Cucumber-JVM (以前开发为Cuke4Duke)。 它使用小黄瓜DSL的规范,存储为纯文本。

Eclipse 4.2中的Cucumber-JVM示例

它可以作为JUnittesting运行。 所以开始使用的唯一问题是让业务人员或产品经理在源代码中读取/写入.features。

结果