Переопределить модуль Dagger в Robolectric Tests

Я работаю над приложением 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, который я объявляю в своем тесте?


person m00sey    schedule 20.06.2013    source источник


Ответы (1)


Я полагаю, вы создаете граф объектов в Application.onCreate(). В этом случае и если вы используете Robolectric 2, вы можете создать тестовое приложение, как описано здесь и создайте граф объектов для ваших тестов с вашими тестовыми модулями (prod и тестовое приложение должны наследоваться от одного и того же базового класса). Дополнительную информацию об этом можно найти здесь. Надеюсь, поможет.

person futtetennista    schedule 20.06.2013
comment
Хорошее предложение. Я сделал метод для внедрения объекта графа и использовал его в тестах, но ваше решение не имеет недостатков дизайна запаха (но имеет недостатки тестов запаха :)). Спасибо! - person Eugen Martynov; 24.06.2013