我是Mockito库的新手,我无法理解以下语法: 在我定义的测试之前 -
when(CLASS.FUNCTION(PARAMETERS)).thenReturn(RETURN_VALUE)
实际测试是 -
assertSame(RETURN_VALUE, CLASS.FUNCTION(PARAMETERS))
我不是只用第一行代码(when... thenReturn
)设置函数的返回值为RETURN_VALUE
吗?如果答案是肯定的,那么当然assertSame
将是真的,测试将通过,我在这里缺少什么?
答案 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));