Я тестирую модель представления, которая имеет следующее определение:
class PostViewModel(private val postApi: PostApi): ViewModel() {
private val _post: PublishSubject<Post> = PublishSubject.create()
val postAuthor: Observable<String> = _post.map { it.author }
fun refresh(): Completable {
return postApi.getPost() // returns Single<Post>
.doOnSuccess {
_post.onNext(it)
}
.ignoreElement()
}
}
}
Мой фрагмент затем отображает автора сообщения, подписавшись на viewModel.postAuthor
в его onActivityCreated
и позвонив и подписавшись на refresh()
всякий раз, когда пользователь хочет обновить сообщение, и все в порядке.
Проблема, с которой я сталкиваюсь, заключается в попытке проверить это поведение в модульном тесте: в частности, я не могу заставить postAuthor
отправить событие в моей тестовой среде.
Мой тест определяется следующим образом:
@Test
fun `When view model is successfully refreshed, display postAuthor`() {
val post = Post(...)
whenever(mockPostApi.getPost().thenReturn(Single.just(post))
viewModel.refresh()
.andThen(viewModel.postAuthor)
.test()
.assertValue { it == "George Orwell" }
}
Тест не пройден из-за отсутствия значений или ошибок, даже если я могу проверить с помощью отладчикачто макет действительно возвращает Post
, как и ожидалось.Есть ли что-то очевидное, что я упускаю, или я совершенно не прав в своем подходе к тестированию?