Mockito.spy没有改变真实物体

时间:2017-02-07 09:29:33

标签: java unit-testing junit mockito

对间谍对象的调用方法不会对实际的间谍对象产生影响:

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测试应该通过。

2 个答案:

答案 0 :(得分:3)

如Mockito所见doc

  

Mockito 没有委托对传递的实例进行调用,而是实际创建了它的副本。

这意味着原始对象obj不会根据间谍对象spy中的内容进行修改。

答案 1 :(得分:2)

我做了一些测试,你应该让spy上的断言不是obj:

@Test
    public void wtf() {
        AAA obj = new AAA();
        AAA spy = Mockito.spy(obj);

        spy.setA(22);

        assertThat(spy.getA(), equalTo(22));
    }