Почему мой тест для моего докладчика иногда истекает? - PullRequest
0 голосов
/ 14 февраля 2020

Доброе утро. Поэтому я тестирую вызов API от моего докладчика с использованием дооснащения + rx java + mvp + junit + mockito.

Иногда, когда я запускаю свой тест, время ожидания истекает. Я отладил его, и если время ожидания не истекло, onsuccess возвращает реальные значения вместо проверенных значений?

Вот мой докладчик:

class PresenterMainActivity(private val contract : Contract.ViewContract): Contract.PresenterContract {

    override fun getPosts() {
        val retrofit = RetrofitClientInstance.getRetrofitInstance()

        retrofit?.let {retrofitInstance ->
            val postsService = retrofitInstance.create(PostsService::class.java)

            postsService.getPosts()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ result ->
                    if (result != null) {
                        contract.updateUI(result)
                    }
                    else {
                        Log.e("TAG", "No results")
                    }
                }, {Log.e("TAG", it.message)})
        }
    }
}

А вот мой тест :

@RunWith(MockitoJUnitRunner::class)
class PresenterMainActivityTest2 {
    @Rule
    @JvmField
    var rule = InstantTaskExecutorRule()

    companion object {
        @ClassRule
        @JvmField
        val schedulers = RxImmediateSchedulerRule()
    }
    @Mock
    private lateinit var contract: Contract.ViewContract
    @Mock
    private lateinit var postsService: PostsService
    private lateinit var presenter: PresenterMainActivity

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        presenter = PresenterMainActivity(contract)
    }

    @Test
    fun testGetPosts() {
        `when`(postsService.getPosts()).thenReturn(Observable.just(testResults()))

        presenter.getPosts()

        var actualResult = listOf<Post>()
        postsService.getPosts().subscribe { result ->
            actualResult = result
        }

        verify(contract).updateUI(ArgumentMatchers.anyList())
        assertEquals(actualResult, testResults())
    }

    private fun testResults(): List<Post> {
        return listOf(
            Post(1, 1, "title1", "body1"),
            Post(2, 2, "title2", "body2")
        )
    }
}

Чего мне не хватает, как я могу избежать реальных сетевых вызовов? Заранее спасибо.

Привет

...