Кто-нибудь знает, как проверить фиктивное взаимодействие внутри карты / карты флапа?
Предполагая, что остальная часть вашего класса выглядит следующим образом:
public class Repository {
private final EntityMapper
public Repository(EntityMapper entityMapper) {
this.entityMapper = entityMapper;
}
@Override
public Observable<Data> getCurrentData() {
return api.getData()
.map(entityMapper::transform);
}
}
Тогда задание поведения над поддельным EntityMapper
будет работать, если вы дождетесь завершения Observable
:
@Test
@Throws(Exception::class)
fun testGetData() {
//given
val data = Data()
whenever(api.getData).thenReturn(Observable.just(data))
//when
repository.getCurrentData().blockingGet()
//then
verify(entityMapper).transform(any())
}
Обратите внимание на вызов blockingGet()
- в противном случае тест можно завершить до того, как произойдет сопоставление. Вам также следует взглянуть на метод Observable#test()
, чтобы увидеть лучшие варианты здесь.
Однако в этом случае, поскольку хранилище делает очень мало, кроме делегирования API и вызова EntityMapper
, и это, кажется, основное взаимодействие, которое вас интересует, почему бы не протестировать EntityMapper
отдельно?
Если вы напишите отдельный тест для EntityMapper
, тогда вы можете использовать тест черного ящика (просто наберите transform
ваших данных и посмотрите, соответствует ли преобразование вашим ожиданиям). Этот вид тестирования гораздо более стабилен и полезен, чем тестирование в «белой коробке» с verify
, которое иногда может выродиться в тесты, являющиеся обратной реализацией тестируемой системы.