如何测试依赖于匕首子组件的片段?



注意:我没有使用Dagger-Android,只是使用Dagger 2。

当我开始编写我的应用程序时,我通过 AppComponent 注入片段,因此我的集成测试有效。

然后我创建了一个名为 MainComponent 的子组件,它位于 MainActivity 中。在我的片段中,我使用

((MainActivity) getActivity()).mainComponent.inject(this);

然后在我的集成测试中,我会做

FragmentScenario.launchInContainer(RecipesListFragment.class, null, R.style.AppTheme, null)

引发错误

EmptyFragmentActivity cannot be cast to ...MainActivity

作为 FragmentScenario 在 EmptyFragmentActivity 中启动片段。

我认为为了解决这个问题,我可以删除对 MainActivity 的依赖来获取组件,所以我使用了一个 FragmentFactory 并将 MainComponent 作为参数传递。但是现在测试失败了,因为当我创建片段方案时,我没有主组件在工厂中传递它。

那么有没有办法启动场景并仍然使用 MainComponent 子组件?

发布我最后为回答恩里克的问题所做的工作。我读了一些关于它的帖子,但自从前段时间以来,我现在找不到它们。

没有明确的答案,所以我最终使用对 MainActivity 的依赖来注入,因为使用 FragmentFactory 证明太麻烦了,没有很多收获。

在AndroidTest文件夹中,我创建了一个空的MainTestActivity,用于扩展MainActivity。

然后在片段测试

ActivityScenario<MainTestActivity> scenario;
@Before
public void setUp() {
scenario = ActivityScenario.launch(MainTestActivity.class).onActivity(activity -> {
MainFragment fragment = new MainFragment();
activity.startActivityFromFragment(fragment, new Intent(activity, MainTestActivity.class), 0);
});
}

相关内容

最新更新