Mockito方法返回null

时间:2013-05-19 12:59:07

标签: java spring unit-testing testng mockito

我查看了论坛,但无法找到为什么会发生这种情况

我有

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

2 个答案:

答案 0 :(得分:7)

通过使用BImpl注释@Mock字段,您说实例本身应该是模拟。但是,你没有告诉Mockito在使用参数调用时模拟应该给出什么结果,所以Mockito使用它返回null的默认行为。

BImpl是具有真实行为的真实类这一事实无关紧要。该字段不包含该类的实例;它包含一个模拟实例。

在您的测试方法中,在致电aImpl.doSomething()之前,请告诉mockito您希望它使用的行为:

when(bImpl.permuteString("test")).thenReturn("someOtherValue");

答案 1 :(得分:1)

可能B实例@Autowired实例AImpl也是一个模拟(无论是模拟B还是模拟BImpl,我不知道。)

在任何一种情况下,任何模拟的默认存根方法都可能返回null,除非你另有说明(除非你stub)。

我无法确定(除非我运行自己的测试),但我可以说,只需添加日志记录语句(或使用调试器)来验证是否有用:

a。)AImpl#b包含什么值(是BImpl还是模拟B)?

b。)是否会调用BImpl#permuateString()

c。)BImpl#permuateString()

的值s