小编mhd*_*.95的帖子

Mockito:无法验证是否调用了挂起函数,因为 Continuation<T> 函数参数在后台不匹配

我正在为我定义的LocalDataSource类编写一些单元测试,这些类包装了 Room 数据库的功能DAO,我的代码如下所示:

房间DAO接口

@Dao
interface PersonDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(person: Person)

}
Run Code Online (Sandbox Code Playgroud)

本地数据源类

class PersonLocalDataSourceImpl(private val personDao: PersonDao) {

    suspend fun insert(dispatcher: CoroutineDispatcher, person: Person) =
        withContext(dispatcher) {
            personDao.insert(person)     // line 20
        }

}
Run Code Online (Sandbox Code Playgroud)

单元测试类

@ExperimentalCoroutinesApi
@RunWith(JUnit4::class)
class PersonLocalDataSourceTest : BaseLocalDataSourceTest() {
    
    @Test
    fun givenPersonLocalDataSource_WhenInsertPerson_ThenPersonDaoInsertFunctionCalledOnce() =
        runBlockingTest {

            withContext(testCoroutineDispatcher) {

                val personDao = Mockito.mock(PersonDao::class.java)
                val personLocalDataSource = PersonLocalDataSourceImpl(personDao)
                val person = mockPerson()


                personLocalDataSource.insert(testCoroutineDispatcher, person)

                Mockito.verify(personDao).insert(person)   // line 36

            }
        }

}
Run Code Online (Sandbox Code Playgroud)

我在运行测试时遇到此错误: …

android unit-testing mockito kotlin-coroutines

6
推荐指数
1
解决办法
3933
查看次数