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

How to test a fragment that depends on a dagger subcomponent?

注意:我没有使用 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 作为参数传入。但是现在测试失败了,因为当我创建 FragmentScenario 时,我没有 MainComponent 可以在工厂中传递它。

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

贴出我最后为回答 Henrique 的问题所做的工作。我看了一些关于它的帖子,但我现在找不到了,因为它是很久以前的了。

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

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

然后在FragmentTest

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);
    });
}