Добрый день, я пытаюсь протестировать мою модель представления, там у меня есть вызов rx java к моему адаптеру, и когда успешно, я вызываю мой адаптер, чтобы обновить мой взгляд на реселлер. Я использую привязку данных для предоставления адаптера из моей модели представления в макет, и я использую dagger2 для внедрения адаптера и репозитория.
Странная вещь в том, что, хотя зависимости являются ложными, отладка говорит мне, что это происходит внутри класса каждой зависимости. Я использую mockito + kotlin + viewmodel + dagger2 + rx java.
Вот моя viewmodel:
class UrbanViewModel@Inject constructor(private val urbanRepository: UrbanRepositoryDagger, val wordsAdapter: WordsAdapter) : ViewModel() {
private val disposable = CompositeDisposable()
fun getDefinitions(term: String) {
displayLoading()
disposable.add(
urbanRepository
.getDefinitionList(term)
.subscribe({
println("xxx")
loaded = true
if (it.isEmpty()) {
displayMessage("No Definitions Retrieved")
} else {
displayWords()
wordsAdapter.update(it)
}
}, {
println("xxx")
loaded = true
//errors
val errorString = when (it) {
is UnknownHostException -> "No Internet Connection"
else -> it.localizedMessage
}
displayMessage(errorString)
})
)
}
...
Это мой тест:
class ExampleUnitTest {
@get:Rule
val mockitoRule: MockitoRule = MockitoJUnit.rule()
// Run code sync
@get:Rule
val taskExecutorRule = InstantTaskExecutorRule()
@get:Rule
val rxSchedulerRule = RxSchedulerRule()
@Mock
private lateinit var urbanRepositoryDagger: UrbanRepositoryDagger
@Mock
private lateinit var wordsAdapter: WordsAdapter
lateinit var viewmodel: UrbanViewModel
@Before
fun setUp() {
MockitoAnnotations.initMocks(this) // this is needed for inititalizytion of mocks, if you use @Mock
viewmodel = UrbanViewModel(urbanRepositoryDagger, wordsAdapter)
}
@Test
fun `init set joke list to empty`() {
val word1 = Word(1, "term", "definition1", 1, 1)
val word2 = Word(2, "term", "definition2", 2, 2)
val word3 = Word(3, "term", "definition3", 3, 3)
val wordList = mutableListOf(word1, word2, word3)
`when`(urbanRepositoryDagger.getDefinitionList(anyString())).thenReturn(
just(wordList)
)
viewmodel.getDefinitions("")
assert(viewmodel.listVisibilityLiveData.value == View.VISIBLE)
assert(viewmodel.progressBarVisibilityLiveData.value == View.GONE)
assert(viewmodel.errorVisibilityLiveData.value == View.GONE)
}
}
Что я делаю не так? Почему отладчик говорит мне, что он попадает внутрь адаптера и репозитория, я учил, что когда вы издеваетесь над ними, они не будут go реальному классу?
Заранее спасибо за вашу помощь
Привет