【问题标题】:Mockito.spy not changing real objectMockito.spy 不改变真实对象
【发布时间】:2017-02-07 09:29:32
【问题描述】:

在间谍对象上调用方法不知何故对真正的间谍对象没有影响:

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 和间谍活动不太熟悉,但从文档中我看到 wtf 测试用例不应该通过。您正在断言 obj 而不是 spy

标签: java unit-testing junit mockito


【解决方案1】:

如在 Mockito doc 中所见:

Mockito 将调用委托给传递的真实实例,而是实际创建它的副本。

这意味着原始对象 obj 不会被间谍对象 spy 中发生的修改。

【讨论】:

  • 对,但如果你改变了真实对象,间谍仍然保持不变(当间谍返回时,它们是两个独立的对象)。
【解决方案2】:

我做了一些测试,你应该将断言设置为 spy 而不是 obj:

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

        spy.setA(22);

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

【讨论】:

    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2018-12-12
    • 2015-11-14
    • 2013-01-18
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多