Mockito - 当时返回

时间:2017-07-20 18:38:43

标签: java mocking mockito

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

when(CLASS.FUNCTION(PARAMETERS)).thenReturn(RETURN_VALUE)

实际测试是 -

assertSame(RETURN_VALUE, CLASS.FUNCTION(PARAMETERS))

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

1 个答案:

答案 0 :(得分:6)

Mockito(或任何形式的模拟,实际上)的观点不是模拟你正在检查的代码,而是用模拟代码替换外部依赖。

例如,考虑一下这个简单的界面:

public interface ValueGenerator {
    int getValue();
}

这是您使用它的代码:

public class Incrementor {
    public int increment(ValueGenerator vg) {
        return vg.getValue() + 1;
    }
}

您希望测试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));