当模拟完这些类成员对象后,我们需要把这些类成员对象注入到被测试类的实例中。 以便在调用被测试方法时,可能使用这些类成员对象,而不至于抛出空指针异常。
利用 Setter 方法注入 如果类定义了 Setter 方法,可以直接调用方法设置字段值。
利用 ReflectionTestUtils.setField 方法注入 JUnit 提供 ReflectionTestUtils.setField 方法设置属性字段值。
利用 Whitebox.setInternalState 方法注入 PowerMock 提供 Whitebox.setInternalState 方法设置属性字段值。
利用@InjectMocks 注解注入 @InjectMocks 注解用来创建一个实例,并将其它对象(@Mock、@Spy 或直接定义 的对象)注入到该实例中。@InjectMocks 注解需要配合@RunWith 注解使用。
设置静态常量字段值 有时候,我们需要对静态常量对象进行模拟,然后去验证是否执行了对应分支下的 方法。比如:需要模拟 Lombok 的@Slf4j 生成的 log 静态常量。但是, Whitebox.setInternalState 方法和@InjectMocks 注解并不支持设置静态常量,需要自己实现一个设置静态常量的方法。
注意:经过测试,该方法对于 int、Integer 等基础类型并不生效,应该是编译器常量优化导致。
以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。