小编m00*_*sey的帖子

在Robolectric测试中覆盖Dagger模块

我正在开发一个Android应用程序,我一直在使用Dagger依赖注入.

我现在正试图测试一个具有这些依赖关系的片段,让我们称之为ProductsService.

在我的Robolectric测试中,我有一个覆盖的测试模块ProductsService:

    @Module(
        includes = ProductsModule.class,
        injects = {
                Fragment.class,
                FragmentTest.class
        },
        overrides = true
)
static class MockProductsModule {
    @Provides
    @Singleton
    public ProductsService providesProductsService() {
        return Mockito.mock(ProductsService.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中,为了运行我的片段,我按如下方式构建它(如此处所示如何使用Robolectric测试片段?)

        FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class)
            .create()
            .start()
            .resume()
            .get();

    FragmentManager fragmentManager = activity.getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(fragment, null);
    fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

问题是,在创建过程中,它会调用Dagger以满足它的依赖关系:

((MyApplication)getActivity().getApplication()).inject(this);
Run Code Online (Sandbox Code Playgroud)

如何覆盖创建片段时创建的对象图,以便MockProductsModule在我的测试中使用I声明?

android robolectric dagger

9
推荐指数
1
解决办法
2843
查看次数

标签 统计

android ×1

dagger ×1

robolectric ×1