定义对象阶段 第 1 步是定义对象阶段,主要包括定义被测对象、模拟依赖对象(类成员)、注入 依赖对象(类成员)3 大部分。 1) 定义被测对象 在编写单元测试时,首先需要定义被测对象,或直接初始化、或通过 Spy 包装…… 其实,就是把被测试服务类进行实例化。 2) 模拟依赖对象(类成员) 在一个服务类中,我们定义了一些类成员对象——服务(Service)、数据访问对象 (DAO)、参数(Value)等。在 Spring 框架中,这些类成员对象通过@Autowired、 @Value 等方式注入,它们可能涉及复杂的环境配置、依赖第三方接口服务……但是, 在单元测试中,为了解除对这些类成员对象的依赖,我们需要对这些类成员对象进 行模拟。 3) 注入依赖对象(类成员) 当模拟完这些类成员对象后,我们需要把这些类成员对象注入到被测试类的实例中。 以便在调用被测试方法时,可能使用这些类成员对象,而不至于抛出空指针异常。
模拟方法阶段 第 2 步是模拟方法阶段,主要包括模拟依赖对象(参数或返回值)、模拟依赖方法 2 大部分。 1) 模拟依赖对象(参数或返回值) 通常,在调用一个方法时,需要先指定方法的参数,然后获取到方法的返回值。所 以,在模拟方法之前,需要先模拟该方法的参数和返回值。 2) 模拟依赖方法 在模拟完依赖的参数和返回值后,就可以利用 Mockito 和 PowerMock 的功能,进 行依赖方法的模拟。如果依赖对象还有方法调用,还需要模拟这些依赖对象的方法。
调用方法阶段 第 3 步是调用方法阶段,主要包括模拟依赖对象(参数)、调用被测方法、验证参 数对象(返回值)3 步。 1) 模拟依赖对象(参数) 在调用被测方法之前,需要模拟被测方法的参数。如果这些参数还有方法调用,还 需要模拟这些参数的方法。 2) 调用被测方法 在准备好参数对象后,就可以调用被测试方法了。如果被测试方法有返回值,需要 定义变量接收返回值;如果被测试方法要抛出异常,需要指定期望的异常。 3) 验证数据对象(返回值) 在调用被测试方法后,如果被测试方法有返回值,需要验证这个返回值是否符合预 期;如果被测试方法要抛出异常,需要验证这个异常是否满足要求。
验证方法阶段 第 4 步是验证方法阶段,主要包括验证依赖方法、验证数据对象(参数)、验证依 赖对象 3 步。 1) 验证依赖方法 作为一个完整的测试用例,需要对每一个模拟的依赖方法调用进行验证。 2) 验证数据对象(参数) 对应一些模拟的依赖方法,有些参数对象是被测试方法内部生成的。为了验证代码 逻辑的正确性,就需要对这些参数对象进行验证,看这些参数对象值是否符合预期。 3) 验证依赖对象 作为一个完整的测试用例,应该保证每一个模拟的依赖方法调用都进行了验证。正 好,Mockito 提供了一套方法,用于验证模拟对象所有方法调用都得到了验证。
以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。