我在论坛上看了一下,但找不到为什么会这样

我有

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");

07-24 14:40