测试的概念
Test Double [^1]is a generic term for any case where you replace a production object for testing purposes.
我们使用Test Double替代真实的依赖组件去和待测系统进行交互,Test Double不必和真实的依赖组件的实现一模一样,比如不用去实现依赖组件复杂的内部逻辑等,我们只需要在满足测试需求范围内,确保对于待测系统来说Test Double提供的API是和依赖组件提供的一样的,API是怎么实现的在这个上下文就显得不重要了。多用于自动化测试比如单元测试和集成测试。
-
Test Stub, you can define answers to me, I will respond the same
Stubs会按照我们设计的输出与待测系统进行交互, 这个桩既不会与测试用例(代码)交互,也不会在待测系统内部进行验证。
Test Stub常用于响应待测系统的请求,然后返回特定的值。- Hard Coded Test Stub
- Configurable Test Stub
UserCase:
- 依赖组件无法使用,影响测试结果
- 依赖组件响应太慢,影响测试速度
- 成为响应者,需要给系统注入特定的数据,从而影响被测试系统
- 成为破坏者,需要给系统注入无效的数据,从而对系统产生异常响应
-
Mock Object,you can set expectation on me and pre-programmed with expectations which form a specification of the calls they are expected to receive.
Mocks是一个完全代替待测系统的组件,并且应用于验证待测系统输出的对象。这个对象接受待测系统的输入,同时返回输出给到待测系统,然后进行验证。其一个重要特点是可以对无法在待测系统上直接被观察到的行为或输出进行验证。
-
Fake Object,you can have me with limited capabilities and working implements, but usually take some shortcut and have simplified version of production code, make it not suit for production (InMemeoryTestDatabase for example)
Fakes是指一个轻量级的完全代替待测系统依赖组件的对象,采用更加简洁的方法实现组件的功能。轻量级是指仅仅提供和依赖组件一样的功能接口保证待测系统正常工作,不需要具有真实依赖组件的很多特性。
-
Test Spy,are stubs, monitor real ones,you can change my behavior. Record some information based on how they called.
Spies是指一个待测系统依赖组件的替身,并且捕捉和保存待测试对象对依赖系统的输出,这个输出是会用于测试代码中的验证。主要用于记录和验证待测试对象对依赖系统的输出。
-
Dummy Object,pass around but never actually used,usually used to fill parameter lists
Dummies是指为了调用被测试方法而传入的假参数,实际上传入的参数不会对测试有任何作用,仅仅是为了成功调用被测试方法,又被称为Placeholder。
REF: