BDD应该通过单元测试,集成测试或两者自动化吗?

Jon*_*han 11 tdd bdd integration-testing unit-testing

BDD被吹捧为"TDD做得对".

然而,TDD广泛用于单元测试,而不是端到端集成测试.

哪种测试最适合BDD?

  • 我们应该只编写集成测试吗?
  • 我们还应该编写单元测试吗?
    • 如果是,每个方案应该有多个单元测试吗?
    • 什么单元测试涵盖多个场景?在使用MSpec等测试框架时,有没有办法构建这些测试?

k3b*_*k3b 13

哪种测试(集成测试,单元测试)最适合BDD?

我将在两个嵌套循环中使用它们,如使用SpecFlow和WatiN的行为驱动开发中所述

* writing a failing integration tests
    * writing a failing unit test as part of the solution of the integration test
        * making the unittest pass
        * refactor
    * writing the next failing unit test as part of the integration test

    * unitl the integration test passes

* writing the next failing integration tests
Run Code Online (Sandbox Code Playgroud)


gmo*_*eck 10

您经常看到BDD周期中使用的接受/集成测试的原因是因为许多从业者非常重视模拟和外部开发.因此,他们倾向于包括端到端集成/验收测试以及单元测试,以确保系统的总体行为.

当假对象在单元测试中被用作协作者而不是真实对象时,很容易验证被测隔离单元是否以正确的方式运行(即它正确地修改了它的状态,并发送了正确的消息) .但是,除了隔离单个对象的行为与预期之外,它无法验证任何内容.因此,必须进行端到端验收测试,以验证系统中的所有对象在一起使用时向最终用户提供承诺的值.

所以基本上在这种方法中,单元测试和验收测试起到以下作用:

单元测试 - 隔离的对象以正确的方式运行

验收/集成测试 - 所有对象一起提供系统的承诺价值.

虽然我自己是这种发展方式的大力支持者,但它有点独立于一般的BDD思想.在我看来,只有当您通过使用模拟和存根在单元测试中隔离被测系统时,才需要接受/集成测试.