《Java单元测试实战》——编写方法:Java编程技巧之单元测试用例编写流程(6) https://developer.aliyun.com/article/1232414?groupCode=java
五、 注入依赖对象
当模拟完这些类成员对象后,我们需要把这些类成员对象注入到被测试类的实例中。以便在调用被测试方法时,可能使用这些类成员对象,而不至于抛出空指针异常。
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等基础类型并不生效,应该是编译器常量优化导致。
《Java单元测试实战》——编写方法:Java编程技巧之单元测试用例编写流程(8) https://developer.aliyun.com/article/1232412?groupCode=java