有没有人遇到过类似的问题,详情如下:在早期版本的androidx.fragment:fragment-testing:1.4.1库中,基于mockito的测试通过,但在将库升级到1.5.3版本后,测试失败,并给出此错误。
用于测试片段的代码:
activity = Robolectric.buildActivity(AppCompatActivity::class.java).setup().get()
activity.supportFragmentManager.beginTransaction().add(android.R.id.content, fragment).commit()
if (idleLooper) {
shadowOf(getMainLooper()).idle()
}
这里如果我传递普通的fragment对象,测试运行,它继续运行测试,但是如果我传递spy(fragment),然后尝试运行code(test),它会中断上面的错误。
我也浏览了库的更改文档,但没有提到关于fragmentmanager的任何具体内容。https://developer.android.com/jetpack/androidx/releases/fragment#1.5.4release版本文档
我试过:
- 传递fragment对象,该对象确实通过了测试用例,但spy(fragment)在1.5.3版本的库中给出了错误,并且相同的代码直到1.4.3库才通过。
- 尝试fragmentScenario基于测试用例,但也无法加载片段,并且在运行测试时出现相同的错误。
- 我有错误的测试只有(Roboelectric &基于mockito的测试)
- 这里是我传递给MyFragment(contact,viewmodel,fragmentManger)的fragment对象,viewmodel和fragment是模拟对象,contact只是数据对象)
1条答案
按热度按时间8qgya5xd1#
我也碰到了这个。您可以通过使用
Mockito.spy(Class<T>)
重载来修复,而不是构造片段并使用Mockito.spy(Object)
。例如,假设mockito-kotlin:
更多详情:
androidx:fragment
的相关变化如下:https://cs.android.com/androidx/platform/frameworks/support/+/b651a62816e8005a0e1c7fbd3435c01820f4c015如果您先insantiate片段,
Fragment
现在会构造一个引用自身的LifecycleRegistry
。然后,当您spy()
示例时,Mockito会构造另一个(模拟)示例,并具有自己的生命周期。这在附加间谍片段时会导致问题。通过使用
spy(Class<T>)
,只创建片段的一个示例。