我在 TDD 和 BDD 方面都没有经验。是的,我已经为现有代码创建了很多单元测试,但这与这里无关。此外,我不能在工作中使用 TDD/BDD,但想尝试一些爱好项目。
我不确定我目前是否正确掌握了 TDD 和 BDD 之间的区别。目前,我只将 BDD 视为演变的 TDD,其最具决定性的特性是能够在更高级别的抽象(用户故事)上工作,然后是 TDD。在 TDD 中,您基本上可以获得相同的用户故事,但它们不像在 BDD 中那样明确。这是对的吗?
在工具方面,假设上述陈述是正确的,对于 TDD,我应该使用 TestNG 或 JUnit 之类的东西,而对于 BDD,我将受益于 JBehave 之类的工具。
现在的问题是我是否应该首先从 TestNG 和 TDD 开始,并且只有在使用它获得一些成功经验之后才迁移到 JBehave 和 BDD?或者这只是浪费时间,没有任何理由阻止我从一开始就尝试使用 Jbehave 和 BDD?
更新:
在收到关于我的问题的两个很好的答案,并花了一些时间对该主题进行额外阅读后,我忍不住不添加指向我发现的一篇很棒的文章的链接。它只是重复了与下面这个问题的两个答案相同的想法,但可能有更多细节。文章中我最喜欢的部分:
The best way to do that is to leverage BDD and TDD. Here is an approach: 1. Write requirements as user stories using the BDD grammar/structure. Do this collaboratively with the key stakeholders. 2. Enter the User Stories (feature + scenarios) in a BDD tool. 3. Write code to map the User Stories to tests. 4. Write production code using TDD to make the tests pass.
如您所见,BDD 不仅仅是正确的 TDD。您可以只使用 BDD 的词汇来改进 TDD,但这就像只使用 BDD 必须为我们提供的一些好处一样。当我们利用这两种技术的优势时,我们将拥有“重要的软件”和“有效的软件”。