一段时间以来,我一直在使用此处observeForever()
描述的方法来测试 Room 和 LiveData,并且它运行良好。但是当我更改为 Android Studio 3.2 时(或者如果是重构,不确定),该方法突然停止工作,抛出一个androidx
java.lang.IllegalStateException: Cannot invoke observeForever on a background thread
我们如何解决这个问题?
一段时间以来,我一直在使用此处observeForever()
描述的方法来测试 Room 和 LiveData,并且它运行良好。但是当我更改为 Android Studio 3.2 时(或者如果是重构,不确定),该方法突然停止工作,抛出一个androidx
java.lang.IllegalStateException: Cannot invoke observeForever on a background thread
我们如何解决这个问题?
我通过添加规则解决了它InstantTaskExecutorRule
。根据文档,它将
一种 JUnit 测试规则,它将架构组件使用的后台执行程序与同步执行每个任务的不同执行程序交换。
所以需要添加
@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()
到测试班让它工作。Java等价物是
@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();
您还需要添加
androidTestImplementation "androidx.arch.core:core-testing:2.0.0"
到您的模型build.gradle
依赖项。
作为这种方法的初学者,接受的答案对我来说有点模糊。所以只是想解释一下
将此添加到您的build.gradle
androidTestImplementation "androidx.arch.core:core-testing:2.0.0
现在我们需要添加rule
测试功能。假设我有一个测试功能writeAndReadCategory
,那么它看起来像这样kotlin
@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()
@Test
fun writeAndReadCategory() {
....
}