8年前关闭。
我在 TDD 和 BDD 方面都没有经验。是的,我已经为现有代码创建了很多单元测试,但这与此处无关。此外,我无法在工作中使用 TDD/BDD,但想尝试一些业余爱好项目。
我不确定我目前是否正确掌握了 TDD 和 BDD 之间的区别。目前,我只是将 BDD 视为进化的 TDD,其最显着的特征是能够在比 TDD 更高的抽象级别(用户故事)上工作。在 TDD 中,您基本上可以获得相同的用户故事,但它们不像在 BDD 中那样明确。这是正确的吗?
在工具方面,假设上述陈述是正确的,对于 TDD,我应该使用 TestNG 或 JUnit 之类的东西,对于 BDD,我将受益于 JBehave 之类的工具。
现在的问题是,我应该首先从 TestNG 和 TDD 开始,然后在获得一些成功的经验后再迁移到 JBehave 和 BDD 吗?或者这只是浪费时间,根本没有任何理由阻止我从一开始就尝试使用 Jbehave 和 BDD?
更新:
在收到关于我的问题的两个很好的答案,并花一些时间阅读有关该主题的其他内容后,我忍不住要添加指向我发现的很棒的 article 的链接。它只是重复了与下面这个问题的两个答案相同的想法,但可能有更多细节。文章中我最喜欢的部分:
最佳答案
BDD 专注于测试应用程序的功能,并确保它符合用户故事中描述的应用程序的既定验收标准。
TDD 倾向于专注于较低级别的代码,在每个类的基础上而不是在每个功能单元的基础上进行测试。
如果您对要在用户故事中实现的目标有一个很好的了解 - 足以列举该功能应该和不应该做的事情的列表 - 您就可以开始 BDD。您可以从该列表中编写 BDD 功能文件,并且在编写一小段代码之前执行此操作将使您能够考虑该功能并具体化您的想法。这将帮助您编写更简洁正确的代码。
我建议将 Cucumber-JVM 作为实现 BDD 测试的工具,但我听说 JBehave 在功能上是相似的。
最后,对我来说,BDD 和 TDD 是相互补充而不是竞争的技术——预先进行 BDD 可以更容易地考虑需要什么,这更容易考虑需要什么低级功能,这反过来又使预先编写单元测试更容易。编写代码后,您将拥有一套测试,可让您证明应用程序符合验收标准。
我做 BDD 的方式是这样的:
1) 检查用户故事的用户接受标准
2) 编写一个包含测试场景的特征文件(英文)来测试这些条件中的每一个。
3)实现功能
4) 使用 Cucumber/JBehave 从功能文件中以编程方式实现测试
5) 确保所有测试通过
然后我们维护这些测试的库,并将它们作为持续集成的一部分运行
功能文件包含特定措辞的说明,例如:
给定用户访问我们的应用程序
当用户点击搜索链接时
然后搜索窗口打开
并且用户在搜索框中输入XXX
用户按下回车键
显示搜索结果
关于tdd - 是否有可能在没有 TDD 经验的情况下学习 BDD?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13645961/