我正在使用robolectric,并且正在更新我的支持碎片到androidx碎片。这意味着将使用FragmentController<>的测试更新为推荐的FragmentScenario。
使用FragmentController,我可以启动它,并且我可以调用 controller.get()
来获取实际的fragment并直接操作它,进行公共调用。有没有一种方法可以用FragmentScenario,直接访问androidx.Fragment实例?
我之所以想直接调用一个公共方法,是因为包含Fragment的Activity监听一个Intent,并在其包含的fragment上调用一个方法,我想测试这个的相关行为。
答案是使用 FragmentScenario.onFragment(). 这让你可以直接在片段的UI线程上执行一个动作,给你一个片段的引用。
例如
FragmentScenario<MyCustomFragment> controller = FragmentScenario.launch(MyCustomFragment.class);
controller.onFragment(fragment -> {
fragment.myCustomFragMethod1();
fragment.myCustomFragMethod2();
}
// assertions here, testing that myCustomFragMethod1() worked.