例如我有处理程序:
@Component
public class MyHandler {
@AutoWired
private MyDependency myDependency;
@Value("${some.count}")
private int someCount;
public int someMethod(){
if (someCount > 2) {
...
}
}
测试它我写了以下测试:
@RunWith(MockitoJUnitRunner.class}
class MyHandlerTest {
@InjectMocks
MyHandler myHandler;
@Mock
MyDependency myDependency;
@Test
public void testSomeMethod(){
ReflectionTestUtils.setField(myHandler, "someCount", 4);
myHandler.someMethod();
}
}
我可以使用ReflectionTestUtils
模拟变量someCount。我能以某种方式使用Mockito注释来模拟它吗?
答案 0 :(得分:5)
只需使用构造函数注入:
@Component
public class MyHandler {
private MyDependency myDependency;
private int someCount;
@Autowired
public MyHandler(MyDependency myDependency,
@Value("${some.count}") int someCount){
this.myDependency = myDependency;
this.someCount = someCount;
}
public int someMethod(){
if (someCount > 2) {
...
}
}
并且您不需要在测试中使用InjectMocks和反射。您将通过构造函数创建测试对象并传入someCount值。测试期间将忽略注释。
答案 1 :(得分:0)
没有内置的方法可以做到这一点,并注意@InjectMocks has its downsides as well:Mockito的@InjectMocks更加礼貌而不是完全安全的功能,如果被测系统增加,它将无声地失败任何领域。
相反,请考虑创建用于测试的构造函数或工厂方法:虽然您的测试代码应该存在于测试而不是生产类中,但您的测试是您的类的使用者,并且您可以为它们显式设计构造函数。 / p>
affix-top