在
间谍对象上调用方法对真正的间谍对象没有影响:
public class AAA {
public int a;
public void setA(int aa) {
this.a = aa;
}
public int getA() {
return a;
}
}
public class Proof {
@Test
public void wtf() {
AAA obj = new AAA();
AAA spy = Mockito.spy(obj);
spy.setA(22);
assertThat(obj.getA(), equalTo(22));
}
}
这怎么可能?我想Proof
测试应该通过。
如 Mockito 文档中所示:
Mockito不会将调用委托给传递的真实实例,而是实际创建它的副本。
这意味着原始对象obj
不会随着间谍对象spy
中发生的情况进行修改。
我做了一些测试,你应该对间谍而不是obj断言:
@Test
public void wtf() {
AAA obj = new AAA();
AAA spy = Mockito.spy(obj);
spy.setA(22);
assertThat(spy.getA(), equalTo(22));
}