Обычный способ проверки onDestroy()
основан на том, что viewSubscription
- это поддельный объект. И тогда вы бы сделали что-то вроде:
@Test
public testOnDestroyWithoutUnsubscribe() {
when(mockedSubscription.isUnsubscribed()).thenReturn(false);
//... trigger onDestroy()
verifyNoMoreInteractions(mockedSubscription);
}
@Test
public testOnDestroyWithUnsubscribe() {
when(mockedSubscription.isUnsubscribed()).thenReturn(true);
//... trigger onDestroy()
verify
verify(mockedSubscription, times(1)).unsubscribe();
}
Другими словами: вы создаете смоделированный объект и настраиваете его на оба возможных пути. Затем вы проверяете, что ожидаемые действия были выполнены (или нет, именно так поступает первый тестовый пример: убедитесь, что вы не отменили подписку).
Конечно, вы не можете протестировать случай "объект подписки равен нулю" (кроме того, что он равен нулю и не гарантирует, что NPE не будет выброшен при запуске onDestroy()
!
Учитывая комментарий ОП: здесь не обязательно использовать насмешку. Но когда вы хотите проверить метод void, ваши возможности довольно ограничены. Вы должны наблюдать побочные эффекты как-то!
Если вы можете получить немодированный экземпляр viewSubscription, чтобы сделать это, хорошо, тогда сделайте это. Но если нет, то каким-то образом вставка смоделированного экземпляра - ваш следующий лучший выбор. Как сделать «внедрение зависимостей», зависит от конкретного контекста, например, от используемых вами сред насмешек / тестирования.