Не удалось выполнить тест всех классов сопрограмм

Я тестировал свой класс докладчика и всю тестовую работу. Но когда я попытался запустить свой тестовый класс, все тесты сопрограмм не прошли.

Я пытаюсь сбросить отправку и очистить прицел.

частный диспетчер val = TestCoroutineDispatcher ()

private val testScope = TestCoroutineScope(dispatcher)

@Before
fun setUp() {
    Dispatchers.setMain(dispatcher)
    products = ProductsMotherObject.createEmptyModel()
    getProductsUseCase = GetProductsUseCase(productsRepository)
    updateProductsUseCase = UpdateProductsUseCase(productsRepository)
    presenter = HomePresenter(view, getProductsUseCase, updateProductsUseCase, products)
}

@After
fun after() {
    Dispatchers.resetMain()
    testScope.cleanupTestCoroutines()
}

а это пример моих тестов

@Test
fun `should configure recyclerview if response is success`() = testScope.runBlockingTest {
    //Given
    `when`(productsRepository.getProductsFromApi()).thenReturn(mutableMapOf())

    //when
    presenter.fetchProducts()

    //then
    verify(view).hideLoading()
    verify(view).setUpRecyclerView(products.values.toMutableList())
} 

У меня есть только отдельные ошибки из моих тестов, но каждый тест работает при запуске одного


person Aris Guimerá    schedule 06.07.2019    source источник


Ответы (1)


Решено. Я нашел этот невероятный пост.

Что я сделал:

Я реализовал свой диспетчер без конструктора.

    private val testDispatcher = TestCoroutineDispatcher()

Вы должны установить функцию @Before

@Before
fun setUp() {
    Dispatchers.setMain(testDispatcher)
}

И сбросить после теста.

@After
fun after() {
    Dispatchers.resetMain()
    testDispatcher.cleanupTestCoroutines()
}

Наконец, каждый тест, реализующий сопрограммы, должен запускаться на MainScope.

@Test
fun `should configure recyclerview if response is success`() = testDispatcher.runBlockingTest {
    MainScope().launch {
        //Given
        `when`(productsRepository.getProductsFromApi()).thenReturn(mutableMapOf())

        //when
        presenter.fetchProducts()

        //then
        verify(view).hideLoading()
        verify(view).setUpRecyclerView(products.values.toMutableList())
    }
}
person Aris Guimerá    schedule 07.07.2019