但是现在假设你编写了下面这些代码:

   public void Addit(Object anObject) {

      List myList = new List();

      myList.Add(anObject);

      myList.Add(anObject);

      // more code...

    } 
 

  你是否想加同一个对象到相同list 两次呢?或许是,或许不是。这一点来说,编译器并不能告诉你,只有你知道你期望代码完成什么样的功能(对于哪些基于你现有代码生成测试代码的自动化测试工具,同样会陷入这个陷阱??它们只会使用你编写的代码,而不是你期望的代码)。

  ● 公司请我来是为了写代码,而不是写测试

  如果使用同样的逻辑,那么我们可以说:公司付给你薪水,并不是让你整天都在调试代码。显然,公司付给你薪水是为了让你编写产品代码,而单元测试大体上是一个工具,是一个和编辑器、开发环境、编译器等处于同一位置的工具。

  ● 如果我让测试员或者QA(Quality Assurance)人员没有工作,那么我会觉得很内疚

  你并不需要担心这些。请记住,我们在此只是谈论单元测试,而它只是一种针对源码的、低层次的,为程序员而设计的测试。在整个项目中,还有其他的很多测试需要这些人来完成,如:功能测试、验收测试、性能测试、环境测试、有效性测试、正确性测试、正规分析等等。

  ● 我的公司并不会让我在真实系统中运行单元测试

  Whoa!我们所讨论的只是针对开发者的单元测试。也是说,如果你可以在其他的环境下(例如在正式的产品系统中)运行这些测试的话,那么它们不再是单元测试,而是其他类型的测试了。实际上,你可以在你的本机运行单元测试,使用你自己的数据库,或者使用mock 对象。

  如果QA 部门或者其他测试人员希望在产品或者其他阶段运行这些测试的话,你可以调整一些技术细节,从而使他们也可以运行一些测试;但是同时要让他们清楚,这些调整后的测试已经不再是单元测试了。