摘要:所谓TDD简单地说是以下两个步骤:确保所有的需求都能被照顾到;在代码不断增加和重构的过程中,可以检查所有的功能是否正确。本文我们一起来看下关于TDD的五大误区。

  TDD(全称Test Driven Development)测试驱动开发,是一种软件开发的流程,其由敏捷的“极限编程”引入。其开发过程是从功能需求的测试用例开始,先添加一个测试用例,然后运行所有的测试用例看看有没有问题,再实现测试用例所要测试的功能,然后再运行测试用例,查看是否有case失败,然后重构代码,再重复以上步骤。

  其理念主要是确保两件事:

  ● 确保所有的需求都能被照顾到。

  ● 在代码不断增加和重构的过程中,可以检查所有的功能是否正确。

  原文作者Adam Bar在拜读了Bradley Braithwaite的文章后引发了一些思考,对此,他补充了对TDD的一些看法,列举出TDD的五大误区。以下是文章译文:

  1、即使没有单元测试,也比有单元测试做的差要好。 (It's better to have no unit tests than to have unit tests done badly )

  2、利用代码测试能够产生许多高效的代码且代码看起来更加可靠、实用。

  一、不要使用Mocking Framework VS 太多测试设置

  也许有人会说,这两点很矛盾,因为使用Mocking Framework会导致产生过多的测试设置。这需要我们保持一个良好的平衡问题。

  测试代码势必会产生一些依赖关系,倘若不使用Mocking framework,那么我们将无法进行单元测试。这一点是肯定的。

  这里例举有关代码测试和数据库的例子——我们通常称之为集成测试、half-arsed测试,这也是测试查询本身可靠的方法。

  但是,在大多数情况下,我们使用stubs,避免使用mocks——两者之前的区别非常重要。Mocks作为一种行为测试工具常被用来执行检查过度使用的自定义测试,同一个人在同一时间编写代码,如同检查我们刚刚故意创建的设计一样。 TDD导致大量的Mock和Stub。Test Case并不一定是那么容易的,如果你的Test Case中的Mock可能是错的,你需要重写他们。也许你会说,算是不用TDD,在正常的开发过程中,我们的确需要使用Mock和Stub。没错!的确是这样的,不过,记住,我们是在实现代码后来决定什么地方放一个Mock或Stub,而不是在代码实现前干这个事的。所以,TDD中,Test Case是开发中重要的环节,Test Case的质量的问题会直接导致软件开发的正确和效率。

  我们更加关注的是真实的验证结果(stubs将带给你很多帮助),而不是通过耦合来实现。 没有什么比维持一个测试套件和spaghetti-flavoured mock 装置更糟糕的事了。