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如果你把它作为一个答案,我会接受的。