Android Модульный тест - модернизация и rx Java, запрос никогда не заканчивается - PullRequest
0 голосов
/ 09 февраля 2020

Я начал изучать модульный тест в android, и я пытаюсь выполнить http-запрос с Retrofit2 и RxJava2, но когда я выполняю текущий запрос, он никогда не заканчивается. Вот мой код TestCase:

@RunWith(RobolectricTestRunner::class)
@Config(sdk = [Build.VERSION_CODES.O_MR1])
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class LoginPageTestCase {

    @Rule
    @JvmField
    val rule: MockitoRule = MockitoJUnit.rule()
    @Rule
    @JvmField
    var testSchedulerRule = RxImmediateSchedulerRule()
    @Mock
    lateinit var view: UserLoginContract.LoginView
    @Spy
    @InjectMocks
    lateinit var presenter: UserLoginPresenterImpl

    @Before
    fun `init mocks`() {
        MockitoAnnotations.initMocks(this)
    }

    @Test
    fun `1 valid fields`() {
        presenter.onAttach(view)
        assert(presenter.view.isNotNull())
    }

    @Test
    fun `2 try login`() {
        val loginRequest = LoginRequest("orij@test.co.il", "Aa123!!!")
        val loginRequestTestObserver = presenter.makeLoginRequest(loginRequest).test()
        loginRequestTestObserver.apply {
            awaitTerminalEvent()
            assertNoErrors()
            assertComplete()
            assertValueCount(1)
        }
        loginRequestTestObserver.assertNoErrors().assertValue { it.userData.isNotNull() }
        val userDetails = loginRequestTestObserver.values()[0]
        assert(userDetails.isNotNull())
        print("Show token: ${userDetails.userData.token}")
        backToMainThread()
    }
}

RxImmediateSchedulerRule :

class RxImmediateSchedulerRule : TestRule {

    override fun apply(base: Statement, d: Description): Statement {
        return object : Statement() {
            @Throws(Throwable::class)
            override fun evaluate() {
                RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() }
                RxJavaPlugins.setComputationSchedulerHandler { Schedulers.trampoline() }
                RxJavaPlugins.setNewThreadSchedulerHandler { Schedulers.trampoline() }
                RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() }

                try {
                    base.evaluate()
                } finally {
                    RxJavaPlugins.reset()
                    RxAndroidPlugins.reset()
                }
            }
        }
    }
}

Примечание. То, что я пытаюсь проверить, - это реальный запрос и проверка всех полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...