Intereting Posts
Android. Если WebView отображается дополнительно, buggus, View также создается Как передать значения между действиями на Android? Изменение цвета плавающей кнопки Android Эмулятор Genymotion: Ошибка установки: INSTALL_FAILED_MISSING_SHARED_LIBRARY Как закрыть проект в Android Studio? Несколько суперклассов и повторное использование кода Как я могу поддержать приложение Android для нескольких магазинов Android? Android 5.0 – ProgressBar не может отображаться над кнопкой Есть ли альтернатива Location Client (API Google Play)? Android: как поддерживать соотношение сторон в анимации Текстовый редактор макета ADT eclipse xml – часто прерывается до закрытия файла и повторного открытия Как заставить TextWatcher ждать некоторое время, прежде чем делать какие-либо действия Добавление пользовательского типа mime в контакты в android Установить изображение на кнопку в android? Android RelativeLayout программно устанавливает centerInParent

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

Solutions Collecting From Web of "Переопределите модуль кинжала в Robolectric Tests"

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