The*_*ian 12 kotlin android-espresso android-navigation-graph
我有两个 Fragment,一个是我图中的 home 片段。单击按钮后,用户将被导航到第二个片段。它通过将用户导航到第二个片段并显示文本来按预期工作。所以图很好。
现在我想编写一个仪器测试。
@RunWith(AndroidJUnit4::class)
class TransitionTest {
@Test
fun testNavigationToSecondFragment() {
val navController = TestNavHostController(
ApplicationProvider.getApplicationContext())
navController.setGraph(R.navigation.my_graph) <--throws exception
// the rest of my test continues here
}
}
Run Code Online (Sandbox Code Playgroud)
但是,上面显示的用于设置图形的行会引发以下异常:
IllegalStateException:必须在主线程上调用方法 addObserver。
我的环境:
fragment_version = 1.2.5 nav_version = 2.3.1 浓缩咖啡 = 3.3.0
有谁知道发生了什么以及如何解决它?
我把这个setGraph函数包裹在里面runOnUiThread,测试通过了。一旦我找到真正的原因和更好的解决方案,我会更新答案。
runOnUiThread {
navController.setGraph(R.navigation.my_graph)
}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的情况,所以我将尝试解释其根本原因。从androidx.lifecycle:lifecycle-*:2.3.0-alpha06. 中的行为发生了变化LifecycleRegistry 。LifecycleRegistry现在验证它的方法在主线程上被调用。现在还有一个悬而未决的问题是检测测试是否在 MainThread 中运行?显然没有,否则它就会通过。它使用Instrumentation Thread运行大多数测试。根据文档,您可以使用@UiThreadTest或runOnUiThread作为顶级答案。
| 归档时间: |
|
| 查看次数: |
5312 次 |
| 最近记录: |