Mockito在测试方法之外存根

Sur*_*rya 7 java mockito

我在测试方法之外有以下方法

private DynamicBuild getSkippedBuild() {
    DynamicBuild build = mock(DynamicBuild.class);
    when(build.isSkipped()).thenReturn(true);
    return build;
}
Run Code Online (Sandbox Code Playgroud)

但是当我调用这个方法时,我得到以下错误

org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:
-> at LINE BEING CALLED FROM

E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, you naughty developer!
Run Code Online (Sandbox Code Playgroud)

当你在测试方法之外存在时,看起来mockito不高兴.这不受支持吗?

编辑:我可以通过在@Test方法中进行存根来实现这一点,但我想在@Tests中重用存根.

axt*_*avt 14

如果isSkipped()不是final方法,则此问题可能表示您尝试在另一个方法的存根正在进行时存根方法.它不受支持,因为Mockito依赖when()于其存根API中的方法调用(等)的顺序.

我想你的测试方法中有这样的东西:

when(...).thenReturn(getSkippedBuild());
Run Code Online (Sandbox Code Playgroud)

如果是这样,您需要重写如下:

DynamicBuild build = getSkippedBuild();
when(...).thenReturn(build);
Run Code Online (Sandbox Code Playgroud)

  • @DavidWallace我正在寻找一个丢失的thenReturn(),就像建议的错误一样.我本来希望mockito告诉我内联模拟不起作用. (4认同)
  • 是的,就是这样。多么无用/错误的错误消息。 (3认同)
  • 它怎么没有帮助?它告诉你有未完成的存根.它告诉你未完成的茬的线.您还获得了实际触发错误的堆栈跟踪(即,您尝试存根第二个方法的堆栈,而第一个方法的存根未完成).当你有未完成的存根时,你还会更喜欢Mockito告诉你什么? (3认同)