关于单元测试
特性
- 自动、可重复的
- 容易实现
- 一旦写好,将来都可使用
- 任何人都可以运行
- 单击一个按钮就可运行
单元测试与集成测试的区别
集成测试运行多个集成到一起的代码单元,用来确认软件中应该出现的一个或多个预期结果,而单元测试通常只鼓励运行和测试某个单元
测试方法命名规则
[被测方法]_[场景]_[预期行为]
应遵循的原则是一个测试类中最多只有一个Mock对象,其余为Stub
对象
Stub
对象
对代码单元中现有依赖项的一个替代品,可认为控制,通过使用Stub
对象无需涉及依赖项即可对代码进行测试,因为Stub
对象可以认为控制其方法的结果,达到解除依赖的目的
Stub
与Mock
的区别
Stub
对象不会使测试失败,Mock
对象可以使测试失败,Mock
对象中会保存对象的状态用于assert
- 使用
Stub
对象时Assert
断言都是针对被测试类的,使用Mock
对象则是对模拟对象进行断言
不需要对私有方法进行单元测试(在满足第三条的情况下)
- 私有的方法一定是供暴露出来的方法调用的,测试暴露方法,也就同时测试了私有方法,如果做不到,是否代码有问题?
- 单元测试的目的是为了保证你修改复用代码时不会影响到所有引用这段代码的程序,
private
方法本来就不能被别的类引用,所以不需要单元测试来保证其正确性 - 虽然不测试,但是是建立在以下原则上的
- 你不应该有任何方法是从一开始设计出来就是
private
的,因为你的每段程序都应该在单元测试的驱动之下产生,而测试是不可能驱动出来一个private
方法的 - 那么
private
从哪里来?只能从重构来。所以private
方法是不需要测试的,因为它是重构的产物,而重构是不改变程序可观察行为的 - 既然行为不改变,测试自然也不需要有任何改变,所以不需要针对
private
方法建立任何新的测试
- 你不应该有任何方法是从一开始设计出来就是
一些原则
- 测试用例能验证函数的正确性
- 测试用例尽可能涵盖边界条件
- 一些异常和错误处理
Stub
不可以打桩的情况:
- 不可以对
exit
函数打桩,编译器做了特殊优化 - 不可以对纯虚函数打桩,纯虚函数没有地址
static
声明的普通内部函数不能打桩,内部函数地址不可见
参考文章
Unit Test](https://www.cnblogs.com/phenixyu/p/3965173.html)