Java的BDD框架有什么区别? [关闭]

问题

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

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

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


#1 热门回答(97 赞)

我刚刚完成了三个针对Java的BDD框架的比较。显然,我的发现有一个相当短的使用日期。
Concordion-非常灵活

  • 非常漂亮的报告输出
  • 漂亮的插件框架
  • 记录不完整。我不得不阅读消息来源来解决它(幸运的是它的质量非常好)。
  • 灯具似乎最终与html紧密耦合。
    EasyB-非常浅的学习曲线(即使对于非Groovy开发人员)
  • 极其强大的DBUnit集成
  • 显然不支持参数(导致文本和代码之间非常模糊的故事或重复(编辑:实际上有,但它的文档被很好地隐藏了。)
  • 故事和代码紧密耦合(同一文件)
  • 非常基本的报告输出
  • 无法使IntelliJ插件工作
  • 非活动社区(Maven插件似乎已经被打破了三个月 - 没有多少代码示例可供使用)
    JBehave-极其强大和灵活(例如通过故事构成减少锅炉板作为先决条件)
  • 广泛(如果碎片化)文档和示例
  • 对不同框架和环境的广泛支持(如果压倒性的话)
  • 将故事文件与代码完美分离
  • 看起来有一个非常活跃的社区和更多的例子,并在网上讨论它。
  • 相当陡峭的学习曲线(比Concordion / EasyB花了3-4倍才算出来)

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


#2 热门回答(34 赞)

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

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

从我看过的一些框架来看

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

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


#3 热门回答(18 赞)

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

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

我在这里发现了他们中的几个,但我不确定选择哪一个。

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

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

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