我正在测试我的演讲者班级和所有测试工作。但是,当我尝试运行测试类时,所有协程测试均失败。
我正在尝试重置我的派遣并清理我的示波器。
私有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())
}
我的测试中只有一个错误,但是每个测试在单次运行时都有效
答案 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())
}
}