一、基本概念
1、单元测试
单元测试的目的是测试当前模块的正确性。因此,单元测试的覆盖范围仅限于一个单元(单元可以是类、模块、方法等)。而且单元测试对当前应用的其他模块不做引用,尽量只运行当前模块的代码,以减少其他模块的干扰。
2、集成测试
集成测试的目的是测试几个模块一起协同工作时的正确性。因此,集成测试的覆盖范围更高,可能包含若干个单元,甚至整个应用。解释完这些概念之后,再回过头看我们之前的问题,我们发现这些大颗粒度的测试都是集成测试,基本上覆盖了应用的所有逻辑,颗粒度自然会比较大。
二、两者不同
当然,单元测试远远多于集成测试也会引发其他问题。某同学在讨论中就分享了自己的经验:「应用在单元测试全部通过后部署上线,却还是因为严重的 bug 无法启动,只能回滚」。而这个问题也正是单元测试的性质所导致的:单元测试只覆盖了每个单元,并不能保证不同单元一同协作时可以正常工作。也正因此,我们需要单元测试和集成测试一起守护我们的代码。
单元测试 VS 集成测试 | ||
依赖数量 | 少 | 多 |
运行速度 | 快 | 慢 |
覆盖代 |