运行所有协程类测试失败

时间:2019-07-06 23:42:19

标签: android unit-testing kotlin kotlin-coroutines

我正在测试我的演讲者班级和所有测试工作。但是,当我尝试运行测试类时,所有协程测试均失败。

我正在尝试重置我的派遣并清理我的示波器。

私有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())
} 

我的测试中只有一个错误,但是每个测试在单次运行时都有效

1 个答案:

答案 0 :(得分:0)

已解决。我找到了this incredible post

我做了什么:

我在没有构造函数的情况下实现了调度程序。

    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())
    }
}