- 单元测试的特性:
- 自动的,可重复的
- 容易实现
- 一旦写好,将来都可使用
- 任何人都可以运行
- 可以快速运行
- 单击一个按钮就可以运行
- 单元测试与集成测试的区别:集成测试运行多个集成到一起的代码单元,用来确认软件中应该出现的一个或多个预期结果,而单元测试通常只鼓励的运行和测试某个单元
- 测试方法命名规则:[被测方法]_[场景]_[预期行为],一个测试方法中如果有多个断言,前面的断言失败了就会抛异常,导致后面的无法运行.另外应遵循的一个原则是一个测试类中最多只有一个Mock对象,其余为Stub对象
- Stub对象:对代码单元中现有依赖项的一个替代品,可人为控制,通过使用Stub对象无需涉及依赖项即可对代码进行测试,因为Stub对象可以人为控制其方法的执行结果,达到解除依赖的目的.
- 为了增强可测性,可以重构被测试类的设计
- 抽取接口,以允许替换底层实现,这样就可以定义一个Stub对象实现接口,引入到测试类中,解除对具体类的依赖进行测试。引入的方式有多种:构造函数,属性赋值或者在被测试函数中直接定义Stub对象等
- Stub与Mock的区别:
- 隔离框架(isolation framework):是可以方便的进行新建Mock对象和Stub对象的一组可编程Api让程序员不用为了测试或模拟对象之间的交互而编写重复的代码
- 预期: 表示对被调用函数的预期
- 不需要对私有方法进行单元测试(在满足第三条的情况下),理由如下:
- 私有的方法一定是供暴露出来的方法调用的,测试了暴露方法,也就同时测试了私有方法,如果做不到,是否代码重构有问题?
- 单元测试的目的是为了保证你修改复用代码时不会影响到所有引用这段代码的程序 ,private方法本来就不能被别的类引用,所以不需要用单元测试来保证其正确性。
- 然不测试,但是是建立在以下原则上的,你不应该有任何方法是从一开始设计出来就是private的,因为你的每段程序都应该在单元测试的驱动之下产生,而测试是不可能驱动出来一个private方法的。那么private方法从哪里来?只能从重构而来。所以private方法是不需要测试的,因为它是重构的产物,而重构是不改变程序可观察之行为的。既然行为不改变,测试自然也不需要有任何改变,所以不需要针对private方法建立任何新的测试
时间: 2024-09-29 15:32:30