Java的BDD框架之间有什么区别?

Java的BDD框架之间有什么区别?,java,bdd,Java,Bdd,每个(BDD)Java框架的优缺点是什么 例如,我发现了其中一些 如果我已经使用了模拟库(例如),那么使用BDD框架有意义吗?我最初使用纯jUnit进行BDD,但最近我一直在研究,因为它几乎是我使用jUnit时的1:1。它还运行在jUnit之上,因此它已经可以在Eclipse上运行,并且很容易配置以在Hudson这样的连续集成系统上运行。无法与其他人进行比较,但到目前为止,我在JDave方面的经验很好 哦,使用mocks从来都不是一个愚蠢的想法!它们与TDD/BDD没有特别的联系,它们的目的是减

每个(BDD)Java框架的优缺点是什么

例如,我发现了其中一些


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

我最初使用纯jUnit进行BDD,但最近我一直在研究,因为它几乎是我使用jUnit时的1:1。它还运行在jUnit之上,因此它已经可以在Eclipse上运行,并且很容易配置以在Hudson这样的连续集成系统上运行。无法与其他人进行比较,但到目前为止,我在JDave方面的经验很好


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

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

讽刺的是,我最近发现了BDD,发现这个概念很有趣。嘿,这迫使我们写两个测试。。。和规格!令人惊讶的是,后者也可能在某些项目中缺失。。。或者只是缺少BDD强制引入的精确性

本文总结了一些好文章的概念和链接(如Andrew Glover撰写的文章)。此外,对于本线程的主题,它给出了一个相当全面(我想)的BDD框架列表,其中很多是用于Java的。
这并不能解决选择框架的问题,但至少可以简化搜索

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

我的团队已经使用了一段时间。它使用纯文本文件来存储规范。然后,每个步骤(给定、何时、然后)都由某个方法执行,该方法可以从该步骤中提取参数。场景可以缩进并且格式良好,如果客户想要验证它们,这会有很大帮助

也有一些问题。我们已经切换到Java6。有时在执行过程中会忽略一些场景步骤。这可能会给找出bug的位置带来很多麻烦

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

这里有一个有趣的链接

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

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

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


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

我的团队成功地使用了JBehave——我们在使用EasyB之后开始使用它,发现纯文本场景文件更容易处理。

我刚刚完成了Java的三个BDD框架的比较。很明显,到目前为止,我的发现使用的时间很短

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

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

    • 极为强大和灵活(例如,通过将楼层组合作为先决条件来减少锅炉板)
    • 大量(如果是零碎的)文档和示例
    • 对不同框架和环境的广泛(如果压倒性)支持
    • 故事文件与代码的出色分离
    • 看起来有一个相当活跃的社区,在网上有更多的例子和讨论。
    • 相当陡峭的学习曲线(我花了比Concordion/EasyB长3-4倍的时间来计算)
    我没有机会像我希望的那样尝试JDave的Cuke4Duke,但此时可能会推动JBehave。

    不同的人可能有不同的优点和缺点。我通常会看看

    • 开发活动,例如,是否有可能发布新版本,或者最后一个版本已经发布了2年
    • 成熟度,例如,它已经存在多久了,是否有教程甚至书籍可用。(我没有读这些书,这只是被采纳的迹象。)
    • 工具支持,例如是否有Eclipse插件、Ant支持等
    • 依赖项的大小,我不喜欢所有东西都有自己的框架。例如,我想自己选择模拟框架
    • 许可证的种类,这对我来说很重要,因为我工作的公司有法律条款
    • 与相关工具的兼容性,例如是否使用小黄瓜语言
    从一些框架中我看到了