一个单元测试应当具有如下特征: 它应该是自动化的,可重复执行; 它应该很容易实现; 它应该第二天还有意义; 任何人都应该能一键运行它; 它应该运行速度很快; 它的结果应该是稳定的(如果运行之间没有进行修改的话,多次运行一个测试应该总是返回同样的结果); 它应该能完全控制被测试的单元; 它应该是完全隔离的(独立于其他测试的运行); 如果它失败了,我们应该很容易发现什么是期待的结果,进而定位问题所在。 很多人把进行软件测试的行为和单元测试的概念混为一谈。要澄清这个误解,你首先应该回顾自己以前写过的测试,问自己如下问题。 我两周前写的一个单元测试,今天还能运行并得到结果吗?几个月前写的呢?几年前写的呢? 我两个月前写的单元测试,我团队里任何一个人都能运行它们并得到结果吗? 我能在几分钟内跑完我写过的所有单元测试吗? 我能一键运行我写过的所有单元测试吗? 我能在几分钟内写出一个基本的测试吗? 如果你对以上问题中的任何一个回答“不能”,那很有可能实施的并不是单元测试。如果你实施的是单元测试,那对所有那些问题的回答都应该是“能”。当然你做的肯定是某种测试,而且这种测试也和单元测试一样重要,但是和单元测试相比,这种测试具有一些缺点。 你可能会问:“那我以前做的都是什么测试呢?”你做的实际上是集成测试。