Изменение полей шпионского мокито

1

Так что скажем, у меня есть класс

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 теперь макет или оригинал?

  • 0
    Никогда не пробовал, но имхо это не удастся; spy() создает прокси, и я не верю, что прокси копирует поля.
  • 0
    Не подвела меня.
Показать ещё 4 комментария
Теги:
mockito
spy

1 ответ

1
Лучший ответ

Вытягивание этого из api doc http://docs.mockito.googlecode.com/hg-history/be6d53f62790ac7c9cf07c32485343ce94e1b563/1.9.5/org/mockito/Spy.html

Mockito не делегирует вызовы на переданный реальный экземпляр, вместо этого он фактически создает его копию. Поэтому, если вы сохраняете реальный экземпляр и взаимодействуете с ним, не ожидайте, что шпион будет знать об этих взаимодействиях и их влиянии на реальное состояние экземпляра. Следствие состоит в том, что когда ненавязчивый метод называется шпионом, но не на реальном экземпляре, вы не увидите никаких эффектов на реальный экземпляр

Ещё вопросы

Сообщество Overcoder
Наверх
Меню