在过去的几周里,我一直在试验几个 Java 验收测试框架(例如 Fitnesse、JBehave)。
在决定使用哪一个之前,我试图找出是否有任何商业替代品,但没有真正找到任何替代品。任何指针表示赞赏。
我们的要求是(不完整和未排序的列表):
- 使用给定/何时/那么样式的文本和表格
- 标准库的集成,例如 JUnit、Mockito
- IDE集成/工具
- 良好的报告(业务分析师的可读性,开发人员的诊断)
在过去的几周里,我一直在试验几个 Java 验收测试框架(例如 Fitnesse、JBehave)。
在决定使用哪一个之前,我试图找出是否有任何商业替代品,但没有真正找到任何替代品。任何指针表示赞赏。
我们的要求是(不完整和未排序的列表):
对于商业替代品:
这是我所知道的仅有的两个。在 BDD 社区中也没有大量的追随者。我相信两个最常用的工具是 JBehave 和 Cucumber(正如@kazakovs 所指出的,它也可用于 JVM)。这些有助于捕获开发人员和业务分析师都可以阅读的英语场景。我还使用了(.NET 等效的)Fitnesse 和 Slim。一点 CSS 让它看起来像其他的,同时也允许表格。
但是,大多数 BDD 工具都是为全栈、系统范围的场景设计的,通常没有任何模拟,或者可能用自定义框架替换第三方库。模拟库实际上并没有在这种规模下工作的设置。
如果您希望集成 Mockito 和 JUnit,听起来好像您可能正在尝试以较小的规模进行 BDD,使用类或小类。这就是 BDD 最初的启动方式,并且完全有效。
自 BDD 诞生以来,JUnit 之类的工具得到了改进,而 Mockito 并不存在!因此,BDD 工具不再特别需要。对于类级代码,我很乐意简单地使用带有 Given、When 和 Then 的注释,就像这样(这是 C#,但 Java 类似)。
作为更高级别的替代方案,您总是可以敲出一个小的 DSL。这并没有花费我很长时间,而且它是可读的,即使对于非技术业务人员也是如此。它使用 JUnit 运行,如果你愿意,你可以将 Mockito 放在那里(但我仍然怀疑如果你想这样做,你会混淆问题)。
DSL 的另一个好处是它是一种快速、廉价的入门方式,没有 Cucumber 或 JBehave 的设置开销;但是生成的步骤稍后很容易移植到 JBehave 之类的东西(您只需将代码移动到 JBehave 的正则表达式步骤,如果您不能用 Twist 做类似的事情,我会感到惊讶)。由于您不确定自己的要求,我会推荐这条路线,因为它可以帮助您入门并以非常便宜的方式获得有关您所需要的更多信息。
如果您可以使用 Groovy ,我在Spock 框架方面取得了巨大成功。您也可以将它与Geb一起使用来进行 ui 测试。我们后来从使用 Geb 切换到Twist,因为它提供的强大功能更便宜。我们仍然使用 Spock 进行所有服务测试(WebService、REST 等)。在此处阅读我的另一个相关答案Demonstration using Spock
我建议看看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 测试一样。
看看Cucumber-JVM 但我不确定它是否商业化。