Почему мой kotlin android модульный тест идет в хранилище и в мой адаптер? - PullRequest
0 голосов
/ 01 мая 2020

Добрый день, я пытаюсь протестировать мою модель представления, там у меня есть вызов 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 реальному классу?

Заранее спасибо за вашу помощь

Привет

...