改变模拟间谍的领域

时间:2014-05-21 19:49:37

标签: java mockito spy

所以我想说我有一个班级

class JustAClass() {
  Stirng justAField = "nothing";
}

现在我正在测试这个类,我将它放入模拟

JustAClass realClass = newJustACLass();
JustAClass spyClass = Mockito.spy(realClass);

spyClass.justAField = "something"

问题是:realClass.justAField现在等于什么?

编辑:回应@fge 这并没有失败。

    CSVExport spyClass = Mockito.spy(testClass);
    FileOutputStream wFile = Mockito.mock(FileOutputStream.class);

    spyClass.wFile = wFile;

    Mockito.doThrow(IOException.class).when(spyClass).createBlankWorkbook();
    spyClass.export(testEnabledFields);
    Mockito.doThrow(IOException.class).when(wFile).close();
    spyClass.export(testEnabledFields);

现在,testClass中的wFile是模拟还是原始的?

1 个答案:

答案 0 :(得分:1)

从api doc http://docs.mockito.googlecode.com/hg-history/be6d53f62790ac7c9cf07c32485343ce94e1b563/1.9.5/org/mockito/Spy.html

中提取此信息

Mockito 不会委托对传递的实例进行调用,而是实际创建了它的副本。因此,如果您保留真实实例并与之交互,请不要期望间谍知道这些交互及其对实际实例状态的影响。推论是,当在间谍上调用未取消的方法而不是在实例上调用时,你不会看到对实例的任何影响