Так что скажем, у меня есть класс
class JustAClass() {
Stirng justAField = "nothing";
}
Теперь я тестирую этот класс, и я вложил его в макет
JustAClass realClass = newJustACLass();
JustAClass spyClass = Mockito.spy(realClass);
spyClass.justAField = "something"
Вопрос: что теперь имеет значение realClass.justAField
?
EDIT: В ответ на @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);
Точно так же wFile в testClass теперь макет или оригинал?
Вытягивание этого из api doc http://docs.mockito.googlecode.com/hg-history/be6d53f62790ac7c9cf07c32485343ce94e1b563/1.9.5/org/mockito/Spy.html
Mockito не делегирует вызовы на переданный реальный экземпляр, вместо этого он фактически создает его копию. Поэтому, если вы сохраняете реальный экземпляр и взаимодействуете с ним, не ожидайте, что шпион будет знать об этих взаимодействиях и их влиянии на реальное состояние экземпляра. Следствие состоит в том, что когда ненавязчивый метод называется шпионом, но не на реальном экземпляре, вы не увидите никаких эффектов на реальный экземпляр
spy()
создает прокси, и я не верю, что прокси копирует поля.