Android-тесты: Dagger2 + Gradle

Этот ответ очень помог мне указать правильное направление.

Тем не менее, вещи не совсем ясны для меня.

Пожалуйста, может кто-нибудь объяснить мне немного лучше:

  • Вариант 1. Переопределение привязок путем создания подклассов модулей

Это будет означать, что мне действительно придется изменить производственный код, чтобы я мог внедрить фиктивную зависимость?

Пример:

@Test
public void testFoo(){
MyClass class=new MyClass();
assertTrue(class.doStuff());
}

public class MyClass(){
@Inject
private Dependency dependency;

public MyClass(){}   
MyDaggerComponent.builder().foo(new MockDependency).build.inject(MyClass.this);
}

Это означало бы, что мне нужно будет изменить MyClass, чтобы передать фиктивный модуль,

правильный?

  • Вариант 2. Отдельные конфигурации компонентов

Означает ли это, что у меня будет 2 продукта GradleFlavors: один, содержащий производственный модуль и компонент, и один, содержащий макеты.

правильный?


Спасибо за вашу помощь!


person Lisa Anne    schedule 12.03.2016    source источник
comment
Вы видели текущую награду? Это очень похоже на ваш вопрос: stackoverflow.com/q/35771356/1837367   -  person David Medenjak    schedule 12.03.2016
comment
@DavidMedenjak спасибо за указание! +1   -  person Lisa Anne    schedule 12.03.2016


Ответы (1)


Сила внедрения зависимостей очень удобна, особенно для тестирования, поскольку вы можете легко переключить свои зависимости в тестовой среде на фиктивные зависимости.

То, как это должно быть построено, выглядит следующим образом:

  • Зависимости в вашем производственном коде должны быть введены, а не жестко закодированы.
  • В вашей тестовой среде вы должны создать эквивалентные тестовые модули и тестовые компоненты, которые заменят любые зависимости, которые у вас есть в вашем реальном коде.

Если вам нужен правильный пример, я бы посоветовал вам проверить этот шаблон, поскольку он полностью основан на DI с использованием Dagger2.

Зависимости, которые в настоящее время обрабатывает плита котла, следующие:

  • Зависимость от базы данных: инкапсулирует все операции с базой данных.
  • Зависимость общих настроек: имеет дело с общими настройками.
  • Зависимость от локальных файлов: что касается сохранения файлов.
  • Зависимость от аналитики: охватывает все операции по отправке отчетов о событиях в ваш аналитический сервер (GA, Segment, FB, Flurry ..)
  • Зависимость от ведения журнала: инкапсулирует все операции, связанные с ведением журнала на вашей консоли.
  • Зависимость от API: инкапсулирует все операции, связанные с API.
person Abed Almoradi    schedule 23.11.2016