Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 导航组件-模拟导航控制器图形_Android_Android Espresso_Android Testing_Android Architecture Navigation - Fatal编程技术网

Android 导航组件-模拟导航控制器图形

Android 导航组件-模拟导航控制器图形,android,android-espresso,android-testing,android-architecture-navigation,Android,Android Espresso,Android Testing,Android Architecture Navigation,我正在使用导航组件,并尝试使用插入指令的测试来测试我的片段。该片段有一个自定义工具栏,由扩展函数在onViewCreated方法中初始化 覆盖视图上的乐趣CreatedView:View,savedInstanceState:Bundle?{ super.onViewCreatedview,savedInstanceState tbBlack.init } fun androidx.appcompat.widget.Toolbar.init menuId:Int?=无效的 { 标题= menuI

我正在使用导航组件,并尝试使用插入指令的测试来测试我的片段。该片段有一个自定义工具栏,由扩展函数在onViewCreated方法中初始化

覆盖视图上的乐趣CreatedView:View,savedInstanceState:Bundle?{ super.onViewCreatedview,savedInstanceState tbBlack.init } fun androidx.appcompat.widget.Toolbar.init menuId:Int?=无效的 { 标题= menuId?让我来{ 发炎性遗尿 } findNavController.let{ it.graph.let{graph-> val配置=AppBarConfigurationgraph 使用NavControllerit进行设置,配置 } } } 在我的仪器化测试的场景初始化期间,由于导航控制器上的空图,测试崩溃

在测试中模拟导航控制器,以及下图:

@RunWithAndroidJUnit4::类 类LoginFragmentTest{ @试验 趣味测试场{ val mockNavController=mockNavController::class.java val mockGraph=mockNavGraph::class.java mockNavController.graph=mockGraph val scenario=launchFragmentInContainerthemeResId=R.style.AppTheme{ LoginFragment.allow{fragment-> //除了返回片段的新实例, //每当创建片段的视图时获取回调 //或者销毁,以便我们可以设置模拟导航控制器 fragment.viewLifecycleOwnerLiveData.ObserveForRever{viewLifecycleOwner-> 如果viewLifecycleOwner!=null{ //片段的视图刚刚创建 Navigation.setViewNavControllerfragment.RequireReview,mockNavController } } } } scenario.onFragment{ 跑吧{ val viewsIds= listOfR.id.etEmailAddress,R.id.etPassword 用于VIEWSID中的viewId{ OnViewMatchers.withIdviewId .performViewActions.replaceText Thread.sleep500 onViewViewMatchers.withIdR.id.btLogin.check ViewAssertions.matches CoreMatchers.not ViewMatchers.i已启用 } } } } } 在模拟navController的过程中我是否遗漏了什么?

我通过使用由提供的新TestNavHostController解决了这个问题

基本上,你应该:

在应用程序中导入依赖项gradle: 依赖关系{ def nav_版本=2.3.0-alpha06 导航:导航测试:$nav\u版本 } 在androidTest中使用TestNavHostController模拟导航控制器: //创建TestNavHostController val navController=TestNavHostController ApplicationProvider.getApplicationContext val fragmentArgs=Bundle.apply{ putParcelableConstants.RETAIL\单击\源\ ID,RetailDetailsClicked.SOURCE.LIST putParcelableConstants.RETAIL\u ID,RETAIL } navController.setGraphR.navigation.retail\u详细信息\u图形 发射碎片容器 fragmentArgs,R.style.AppTheme { RetailDetailsFragment.allow{fragment-> //除了返回片段的新实例, //每当创建片段的视图时获取回调 //或者销毁,以便我们可以设置模拟导航控制器 fragment.viewLifecycleOwnerLiveData.ObserveForRever{viewLifecycleOwner-> 如果viewLifecycleOwner!=null{ //片段的视图刚刚创建 Navigation.setViewNavControllerfragment.RequireReview,navController } } } } 就这样

我使用提供的新TestNavHostController解决了这个问题

基本上,你应该:

在应用程序中导入依赖项gradle: 依赖关系{ def nav_版本=2.3.0-alpha06 导航:导航测试:$nav\u版本 } 在androidTest中使用TestNavHostController模拟导航控制器: //创建TestNavHostController val navController=TestNavHostController ApplicationProvider.getApplicationContext val fragmentArgs=Bundle.apply{ putParcelableConstants.RETAIL\单击\源\ ID,RetailDetailsClicked.SOURCE.LIST putParcelableConstants.RETAIL\u ID,RETAIL } navController.setGraphR.navigation.retail\u详细信息\u图形 发射碎片容器 fragmentArgs,R.style.AppTheme { RetailDetailsFragment.allow{fragment-> //除了海归 我们的碎片的一个新实例, //每当创建片段的视图时获取回调 //或者销毁,以便我们可以设置模拟导航控制器 fragment.viewLifecycleOwnerLiveData.ObserveForRever{viewLifecycleOwner-> 如果viewLifecycleOwner!=null{ //片段的视图刚刚创建 Navigation.setViewNavControllerfragment.RequireReview,navController } } } }
就这样

非常感谢你!我已经为这个问题挣扎了好几天了@TiagoOliveira很乐意提供帮助:setGraph方法在2.3.0版中不可用,这是为什么?非常感谢!我已经为这个问题挣扎了好几天了@TiagoOliveira很乐意提供帮助:setGraph方法在2.3.0版中不可用,为什么?