我在论坛上看了一下,但找不到为什么会这样
我有
public class AImpl implements A{
@Autowired
B bImpl;
protected void doSomething(){
String s = "test";
String d = b.permuteString(s);
System.out.println(s.substring(1));
}
}
public class BImpl implements B{
public String permuateString(s){
return s;
}
}
在测试中,我有:
@InjectMocks
AImpl aImpl;
@Mock
BImpl bImpl;
@Test
public void testCode(){
testCode(){
aImpl.doSomething();
}
}
permuateString
中的BImpl
方法始终返回null。我需要知道permuteString()的结果才能继续执行doSomething。所以不能为空为什么?
我正在使用
Mockito
最佳答案
通过用BImpl
注释@Mock
字段,您是说实例本身应该是一个模拟。但是,您没有告诉Mockito当使用参数调用该模拟时,该模拟应产生什么结果,因此Mockito使用其默认行为返回null。BImpl
是具有真实行为的真实类这一事实是无关紧要的。该字段不包含该类的实例;它包含一个模拟的实例。
在您的测试方法中,在调用aImpl.doSomething()
之前,先告诉mockito您希望它使用的行为:
when(bImpl.permuteString("test")).thenReturn("someOtherValue");