在等待了60000毫秒后,测试协同程序没有完成Android测试



我正在尝试使用junit4测试房间数据库,当我运行测试时,我使用流和协程。我得到kotlinx.coroutines.test.UncompletedCoroutinesError: After waiting for 60000 ms, the test coroutine is not completing, there were active child jobs: [DispatchedCoroutine{Active}@773f274]我以前尝试过使用runBlocking和runBlockingTest以及runTest测试类->

@RunWith(AndroidJUnit4::class) // Annotate with @RunWith
class TaskDatabaseTest {
@get:Rule
var instatExecutorRule = InstantTaskExecutorRule()
private lateinit var database: TaskDatabase
private lateinit var dao: TaskDao
private val testCoroutineDispatcher = StandardTestDispatcher()
private val testCoroutineScope = TestScope(testCoroutineDispatcher)

@Before
fun setup() {
Dispatchers.setMain(testCoroutineDispatcher)
database = Room.inMemoryDatabaseBuilder(
ApplicationProvider.getApplicationContext(),
TaskDatabase::class.java
).allowMainThreadQueries().build()
dao = database.taskDao()
}
@After
fun tearDown() {
database.close()
}
@Test
fun insert() = testCoroutineScope.runTest {
// Arrange
val task = Task("do exercise", id = 1)
dao.insert(task)
val tasks = dao.getTasksSortedByName("", false).toList()
assertThat(tasks).contains(task)
}}

代码中的问题是流不断地发送数据,而runTest正在等待它完成。但这永远不会发生。因此,在60000毫秒之后,runTest将抛出一个错误。您可以使用turbine库来测试流。你可以这样做:-1( 。在模块级build.gradle文件中添加以下依赖项

dependencies {
testImplementation 'app.cash.turbine:turbine:0.12.1'
androidTestImplementation 'app.cash.turbine:turbine:0.12.1'
}

2( 。然后,

@Test
fun insert() = runTest {
val task = Task("do exercise", id = 1)
dao.insert(task)
val task2 = Task("do homework", id = 2)
launch {
delay(1000)
dao.insert(task2)
}
dao.getTasksSortedByName().test {
val tasksList = awaitItem()
assertThat(tasksList).contains(task)
val tasksList2 = awaitItem()
assertThat (tasksList2).contains(task2)
cancel()
}

}

最新更新