繁体   English   中英

使用 SafeArgs 和 Mockito 测试导航组件

[英]Test Navigation Component with SafeArgs and Mockito

我正在尝试测试片段 A 是否通过导航组件的 navigate(NavDirection) 方法调用片段 B,并使用 Mockito。 问题是从片段 A 到片段 B 的操作具有安全的参数(确切地说是一个对象),并且在尝试执行以下操作时:

verify(navController).navigate(FragmentADirections.actionFragmentAToFragmentB(payload))

Mockito 抛出“论据不同!” 错误,调用之间的区别在于payload的实例。 我在这里所做的是,这个片段 A 的(模拟)视图模型接收启动片段的活动的额外意图(使用 launchFragmentInHiltContainer 辅助方法),并从中捕获有效负载对象(然后在FragmentADirection 的动作方法的参数)。 这是创建“其他实例”的时刻,但我不需要 Mockito 来验证实例的相等性,而我只需要检查片段 A 调用是否正确导航到片段 B。

有没有办法使用 Mockito 来实现这一点?

代码流程:

  1. 片段 A 调用视图模型,传递它的活动引用
  2. viewmodel 使用有效负载捕获 intent.extras
  3. viewModel 调用 navigate 方法传递在上一步中捕获的有效负载

PS:我正在使用 Hilt,并且我正在以这种方式初始化我的 navController 模拟实例:

private val navController = mock(NavController::class.java)

虽然我没有找到一种方法让 Mockito 检查有效负载数据而不是实例之间的差异,但我还是按照@ianhanniballake 的建议再次尝试使用TestNavHostController ,当我重构代码时,我注意到当我在视图中检查文本时,而不是使用R.string我使用的是R.id ,这导致测试失败。 现在我已经纠正了这一点,一切似乎都很好。

因此,对于这种情况,请在查看navController.currentDestination?.id值之前检查您是否进行了错误的断言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM