Java 改变莫基托间谍的领域

Java 改变莫基托间谍的领域,java,mockito,spy,Java,Mockito,Spy,假设我有一节课 class JustAClass() { Stirng justAField = "nothing"; } 现在我正在测试这个类,并将其放入一个模拟中 JustAClass realClass = newJustACLass(); JustAClass spyClass = Mockito.spy(realClass); spyClass.justAField = "something" 问题是:realClass.justAField现在等于什么 编辑:回应@fge

假设我有一节课

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现在是模拟文件还是原始文件

从api文档中提取此


Mockito委托调用传递的实际实例,而是实际创建其副本。因此,如果您保留真实实例并与之交互,不要期望间谍知道这些交互及其对真实实例状态的影响。推论是,当在spy上调用未隐藏的方法而不是在真实实例上调用时,您不会看到对真实实例的任何影响
spy()
创建了一个代理,我不相信代理会复制字段。从api doc Mockito中提取它不会将调用委托给传递的真实实例,而是实际创建了它的副本。因此,如果您保留真实实例并与之交互,不要期望间谍知道这些交互及其对真实实例状态的影响。推论是,当在间谍身上调用未隐藏的方法而不是在真实的实例上调用时,你不会看到对真实实例的任何影响。嗯,好吧,那么我站出来更正。。。但我通常不使用这样的实例字段:)…如果执行该代码,然后执行
println
realClass.justAField'和
spyClass.justAField
?然后你的问题(realClass.justAField是什么?)answered@ohiocowboy如果你把它作为一个答案,我会接受的。