Доброе утро. Поэтому я тестирую вызов 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")
)
}
}
Чего мне не хватает, как я могу избежать реальных сетевых вызовов? Заранее спасибо.
Привет