Mockito-何时返回

Paz*_*Paz 7 java mocking mockito

我是Mockito库的新手,无法理解以下语法:在定义测试之前-

when(CLASS.FUNCTION(PARAMETERS)).thenReturn(RETURN_VALUE)
Run Code Online (Sandbox Code Playgroud)

实际测试是-

assertSame(RETURN_VALUE, CLASS.FUNCTION(PARAMETERS))
Run Code Online (Sandbox Code Playgroud)

我不是只用第一行代码(when... thenReturn)将函数的返回值设置为RETURN_VALUE吗?如果答案是肯定的,那当然assertSame是正确的,并且测试将通过,我在这里遗漏了什么?

Mur*_*nik 13

Mockito的目的(实际上是任何形式的模拟)不是模拟您要检查的代码,而是用模拟代码替换外部依赖项。

例如,考虑您具有以下简单接口:

public interface ValueGenerator {
    int getValue();
}
Run Code Online (Sandbox Code Playgroud)

这是使用它的代码:

public class Incrementor {
    public int increment(ValueGenerator vg) {
        return vg.getValue() + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

您想测试Incrementor逻辑,而不依赖于任何单独的实现ValueGenerator。这就是Mockito发挥作用的地方:

// Mock the dependencies:
ValueGenerator vgMock = Mockito.mock(ValueGenerator.class);
when(vgMock.getValue()).thenReturn(7);

// Test your code:
Incrementor inc = new Incrementor();
assertEquals(8, inc.increment(vgMock));
Run Code Online (Sandbox Code Playgroud)

  • 我寻找这个答案已经很长时间了。+1 (4认同)
  • 我见过很多仅模拟测试的示例。仅测试模拟是非常令人困惑和毫无意义的,对吧?例如,返回 vg.getValue(); 而不是 return vg.getValue() + 1; 据我所知,基本上没有进行任何测试,并且有很多例子可以做到这一点 (2认同)