Java的BDD框架有什么区别?

use*_*109 120 java bdd

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

例如,我在这里找到了一些.

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

Cao*_*lte 98

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

Concordion

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

easyb中

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

JBehave

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

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

  • +1:到目前为止最好的答案.添加链接. (4认同)

Pet*_*ler 35

对于不同的人来说,"利弊"可能是不同的东西.我经常看看

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

从我看过的一些框架来看

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

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


Pas*_*ent 20

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

这是一个关于Concordion vs. Cucumber和基于Java的验收测试的有趣链接

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

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

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

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


Esk*_*sko 7

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

哦,使用模拟从来都不是一个愚蠢的想法!它们没有特别与TDD/BDD相关联,它们的目的是减轻测试的负担.


Phi*_*Lho 6

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

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

行为驱动开发的文章总结了概念,并链接到一些好文章(如一个由安德鲁·格洛弗写的).此外,对于这个主题的主题,它给出了一个相当全面的(我想)BDD框架列表,其中很多都是针对Java的.
它没有解决选择框架的问题,但至少它会简化搜索......

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