我在 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 必须为我们提供的一些好处一样。当我们利用这两种技术的优势时,我们将拥有“重要的软件”和“有效的软件”。