121

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

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

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

4

8 回答 8

99

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

协和式

  • 非常灵活
  • 非常漂亮的报告输出
  • 不错的插件框架
  • 记录不佳。我必须阅读源代码才能弄清楚(幸运的是它的质量非常好)。
  • Fixtures 似乎最终与 html 紧密耦合。

易B

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

JBehave

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

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

于 2011-05-01T23:43:44.597 回答
36

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

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

我从一些框架中看到了

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

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

于 2012-01-19T21:55:08.987 回答
20

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

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

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

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

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

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

于 2010-02-10T07:37:17.187 回答
7

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

哦,使用模拟绝不是一个愚蠢的想法!它们与 TDD/BDD 无关,它们的目的是总体上减轻测试负担。

于 2009-07-01T22:45:02.543 回答
6

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

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

行为驱动开发文章总结了这个概念并链接到了一些好文章(比如 Andrew Glover 写的文章)。此外,对于这个线程的主题,它提供了一个相当全面的(我想是)BDD 框架列表,其中很多是用于 Java 的。
它并没有解决选择框架的问题,但至少它会简化搜索......

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

于 2010-01-06T10:13:29.247 回答
4

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

Eclipse 4.2 中的 Cucumber-JVM 示例

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

结果

于 2012-12-17T10:17:25.270 回答
3

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

于 2011-03-02T15:58:02.067 回答
3

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

也有一些问题。我们已经切换到 Java 6。有时在执行过程中会忽略某些场景步骤。找出错误在哪里可能会造成很多麻烦。

于 2010-02-10T07:17:58.507 回答