我想知道由Mockito注入的间谍是否可以被篡改以重新获得价值。但是下面的代码抛出IndexOutOfBoundsException。因此,我认为是调用了get()的真实版本,而不是存根版本。间谍可以被打bed吗?
@Test
public void doReturnUsage() throws Exception {
List<String> list = new ArrayList<String>();
List<String> spy = spy(list);
when(spy.get(0)).thenReturn("not reachable");
assertEquals("now reachable", spy.get(0));
}
答案 0 :(得分:0)
使用@Spy时,语法与使用普通Injected实例时略有不同。
Mockito.doReturn("not reachable").when(spy).get(0);
当您要“模拟”正在测试的类下的公共方法时,可以用作间谍。 例如
Class A {
public void methodA() {
// do something
}
public void methodB() {
// do something
call methodA();
// do something else
}
}
在这里,从公共方法“ methodB”调用类A的公共方法“ methodA”。因此,当为“ methodB”编写测试用例时,我们使用间谍对“ methodA”的调用进行了模拟。并且我们独立测试“ methodA”
答案 1 :(得分:0)
考虑另一个示例:
List<String> list = new LinkedList<String>();
List<String> spy = spy(list);
when(spy.size()).thenReturn(100);
when(spy.get(0)).thenReturn("good");
System.out.println(spy.get(0));
System.out.println(spy.size());
为什么可以将spy.size()存根,而不能将spy.get(0)存根?