如果我已经对我的程序进行了集成测试,并且都通过了测试,那么我有很好的感觉,它可以工作。那么编写/添加单元测试的原因是什么?由于无论如何我都必须编写集成测试,所以我只想为集成测试未涵盖的部分编写单元测试。
我知道单元测试优于集成测试的好处是
- 体积小,因此运行速度快(但是,通过集成测试已经测试了添加新单元以测试某件东西,这意味着我的总体测试服变得越来越大,并且运行时间更长)
- 由于只测试一件事,因此更容易找到错误(但是,当我的集成测试失败时,我可以开始编写单元测试来验证每个单独的部分)
- 查找集成测试中可能未捕获的错误。例如掩盖/抵消错误。(但是,如果我的集成测试通过了所有测试,这意味着即使存在一些隐藏的错误,我的程序也可以运行。因此,找到/修复这些错误并不是真正的高优先级,除非它们开始破坏未来的集成测试或引起性能问题)
而且,我们总是希望编写更少的代码,但是编写单元测试需要更多的代码(主要是安装模拟对象)。我的一些单元测试和集成测试之间的区别在于,在单元测试中,我使用模拟对象,而在集成测试中,我使用真实对象。其中有很多重复项,即使在测试中,我也不喜欢重复的代码,因为这会增加更改代码行为的开销(重构工具无法始终保持所有工作)。