9

我正在开发一个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);
    }
}

在我的测试中,为了运行我的片段,我按如下方式构建它(如此处所示如何使用 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();

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

((MyApplication)getActivity().getApplication()).inject(this);

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

4

1 回答 1

12

我想你正在创建对象图Application.onCreate()。如果是这种情况并且您使用的是 Robolectric 2,您可以按照此处的说明创建一个测试应用程序,并使用您的测试模块为您的测试创建一个对象图(产品和测试应用程序必须继承自同一个基类)。有关这方面的更多信息,您可以在这里查看。希望能帮助到你。

于 2013-06-20T21:54:44.743 回答