2

所以可以说我有一堂课

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 现在是模拟的还是原来的?

4

1 回答 1

1

从 api 文档http://docs.mockito.googlecode.com/hg-history/be6d53f62790ac7c9cf07c32485343ce94e1b563/1.9.5/org/mockito/Spy.html中提取

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

于 2014-05-22T18:26:27.567 回答