适用于 Java 平台的商业 BDD 工具

Posted

技术标签:

【中文标题】适用于 Java 平台的商业 BDD 工具【英文标题】:Commercial BDD tools for Java platform 【发布时间】:2013-10-22 09:37:35 【问题描述】:

在过去的几周里,我一直在试验几个 Java 验收测试框架(例如 Fitnesse、JBehave)。

在决定使用哪一个之前,我试图找出是否有任何商业替代品,但没有真正找到。任何指针表示赞赏。

我们的要求是(不完整且未排序的列表):

使用 given/when/then 样式的文本和表格 标准库的集成,例如 JUnit、Mockito IDE 集成/工具 良好的报告(业务分析师的可读性,开发人员的诊断)

【问题讨论】:

【参考方案1】:

对于商业替代品:

Thoughtworks' "Twist" Paul Gerrard 的 "Business Story Manager",它还涉及一些更高级别的 BDD 模式,识别利益相关者并跟踪场景与更大规模需求的关系

这是我所知道的仅有的两个。在 BDD 社区中也没有大量的追随者。我相信两个最常用的工具是 JBehave 和 Cucumber(正如@kazakovs 所指出的,它也可用于 JVM)。这些有助于捕获开发人员和业务分析师都可以阅读的英语场景。我还使用了(.NET 等效的)Fitnesse 和 Slim。一点 CSS 让它看起来像其他的,同时也允许表格。

但是,大多数 BDD 工具都是为全栈、系统范围的场景而设计的,通常没有任何模拟,或者可能用自定义框架替换第三方库。模拟库实际上并没有在这种规模下工作的设置。

如果您希望集成 Mockito 和 JUnit,听起来好像您可能正在尝试以较小的规模进行 BDD,包括类或小类。这就是 BDD 最初的启动方式,并且完全有效。

自 BDD 诞生以来,JUnit 等工具得到了改进,而 Mockito 并不存在!因此,BDD 工具不再特别需要。对于类级代码,我很乐意简单地使用带有 Given、When 和 Then 的 cmets,例如 this(这是 C#,但 Java 类似)。

作为更高级别的替代方案,您可以随时敲出small DSL。这并没有花费我很长时间,而且它是可读的,即使对于非技术业务人员也是如此。它使用 JUnit 运行,如果需要,您可以将 Mockito 放在那里(但我仍然怀疑如果您想这样做,您会混淆问题)。

DSL 的另一个好处是它是一种快速、廉价的入门方式,没有 Cucumber 或 JBehave 的设置开销;但是生成的步骤稍后很容易移植到 JBehave 之类的东西(您只需将代码移动到 JBehave 的正则表达式步骤,如果您不能用 Twist 做类似的事情,我会感到惊讶)。由于您不确定自己的要求,我会推荐这条路线,因为它可以帮助您入门并获得更多关于您确实需要的信息,而且非常便宜。

【讨论】:

感谢您的回答。我们在上周末找到了 Twist - 仍在等待试用许可证 :-( 我们仍在努力为不同的范围寻找合适的工具/方法......我们一直在尝试 JUnit 测试中的 Given/When/Then 样式和 micro DSL 样式。只要您没有大量相似的输入组合,两者都可以。代码方法不允许我们保持对所有示例用例的概述并发现缺失的示例。在 JUnit 中使用 @Parametrized 来表示决策表并不是一个很好的可读方法。当然,代码并不总是促进交流的好方法,这对你来说显然不是新信息。 @jens,您可能从 Cucumber 等人那里获得的好处之一是步骤的可重用性。这仅适用于系统级别(在单元级别,类应该有单一的职责,没有重复,所以没有重复的步骤)。所以我推荐类的评论风格。如果您使用的是决策表,您可以随时将 Fitnesse / Slim 和传统的 Fitnesse 混合使用,或者 Cucumber 可以轻松地使用决策表。 另外,如果您在场景中有很多相似的输入组合,请尝试使用一些默认的“背景”信息,然后在实际场景中指出差异以及对行为的影响。它使了解正在发生的事情变得更加容易,并且对于阅读它们的任何人,无论是商业还是其他人来说都更加有趣。【参考方案2】:

看看Cucumber-JVM 但我不确定它是否商业化。

【讨论】:

【参考方案3】:

如果您可以使用 Groovy,我在 Spock Framework 方面取得了巨大成功。您也可以将它与 Geb 一起使用来进行 ui 测试。我们后来从使用 Geb 切换到 Twist,因为它提供的强大功能更便宜。我们仍然使用 Spock 进行所有服务测试(WebService、REST 等)。在此处阅读我的另一个相关答案Demonstration using Spock

【讨论】:

【参考方案4】:

我建议看看 Concordion (http://www.concordion.org) – 是的,我不得不承认它是一个开源工具而不是商业工具。不过,根据您的要求列表,它可能是一个不错的选择:

由于 Concordion 规范是用简单的英语编写的,因此您可以使用 given/when/then 短语以及表格。在我们的项目中,我们更进一步,基于 Concordion 技术编写文档。因此,您会收到一个活文档系统,其中自动化会检查您对预期行为的描述是否与实际应用程序同步。

Concordion 使用 JUnit 运行测试/活动规范。在夹具类中,您可以使用您喜欢的任何框架,例如 Mockito。我在我的项目中成功地使用了 Concordion 和 Mockito 的组合。

Concordion 的 IDE 集成很好,因为它基于 JUnit。因此,只要有 JUnit 支持,您就可以使用 Concordion。我一直在使用 Eclipse IDE,您可以在其中通过从上下文菜单中调用“Run as JUnit test”来运行和调试 Concordion 测试。

Concordion 提供基于您的规范的 html 报告。因此,您的业务人员可以通过查看指定的描述并阅读系统提供的报告输出来轻松查看问题所在。这些差异由 HTML 文档中的 Concordion 可视化。此外,由于 Concordion 测试由 JUnit 运行,您会收到 JUnit 可能习惯的所有报告支持。您可以轻松调试 Concordion 测试,例如在 Eclipse IDE 中,就像任何其他 JUnit 测试一样。

【讨论】:

以上是关于适用于 Java 平台的商业 BDD 工具的主要内容,如果未能解决你的问题,请参考以下文章

Java基础

是否有适用于 Windows 平台的良好(免费)基准测试工具? [关闭]

适用于任何平台的 WPF .net Core 3.1 应用程序部署工具?

Java 基础 Java平台的3个版本

Windows Live Writer离线博客工具使用教程(适用于博客园CSDN51CTO等等博客)

适用于 Java 的 USB 软件保护加密狗,带有一个“真正”跨平台的 SDK。它存在吗?