接上篇:https://developer.aliyun.com/article/1227520?spm=a2c6h.13148508.setting.16.5c8b4f0eXuUrKv
五、 注入依赖对象
当模拟完这些类成员对象后,我们需要把这些类成员对象注入到被测试类的实例中。以便在调用被测试方法时,可能使用这些类成员对象,而不至于抛出空指针异常。
1. 利用Setter方法注入
如果类定义了Setter方法,可以直接调用方法设置字段值。
2. 利用ReflectionTestUtils.setField方法注入
JUnit提供ReflectionTestUtils.setField方法设置属性字段值。
3. 利用Whitebox.setInternalState方法注入
PowerMock提供Whitebox.setInternalState方法设置属性字段值。
4. 利用@InjectMocks注解注入
@InjectMocks注解用来创建一个实例,并将其它对象(@Mock、@Spy或直接定义的对象)注入到该实例中。@InjectMocks注解需要配合@RunWith注解使用。
5. 设置静态常量字段值
有时候,我们需要对静态常量对象进行模拟,然后去验证是否执行了对应分支下的方法。比如:需要模拟Lombok的@Slf4j生成的log静态常量。但是,Whitebox.setInternalState方法和@InjectMocks注解并不支持设置静态常量,需要自己实现一个设置静态常量的方法:
具体使用方法如下:
注意:
经过测试,该方法对于int、Integer等基础类型并不生效,应该是编译器常量优化导致。
接下篇:https://developer.aliyun.com/article/1227517?groupCode=java





