Как вводить издевательства с кинжалом 2.11

Я пытаюсь вводить насмешки с помощью Android Injector of Dagger 2.11.

Перед использованием Android Inject я использовал для изменения инжектора в классе Application, чтобы я мог вводить mocks. Как это:

class EGOApplication : Application() { lateinit var injectorComponent: InjectorComponent override fun onCreate() { super.onCreate() injectorComponent = DaggerInjectorComponent.builder() .appModule(AppModule(this)) .build() } 

И в моих тестах я использовал для изменения инжекторкомпонент следующим образом:

 app.injectorComponent = DaggerMockComponent.builder() .mockModule(MockModule(app)) .build() 

И тогда я могу приложить свои издевательства из MockModule.

Но теперь я использую Android Injector из этого учебника: https://medium.com/@iammert/new-android-injector-with-dagger-2-part-1-8baa60152abe

Ну … теперь я ввожу свои зависимости следующим образом:

 override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) } 

Таким образом, мой подход больше не работает … Как я могу сделать зависимости инжектора кинжала от моего MockModule?

Любая помощь приветствуется!

Я нашел ответ.

В моих тестах я менял инжекторКомпонента … Вот так:

 @Inject lateinit var someDependency: SomeDependency val app = instrumentation.targetContext.applicationContext as MyApplication app.injectorComponent = DaggerMockComponent.builder() .mockModule(MockModule(app)) .build() if (null == mockComponent) { mockComponent = app.injectorComponent as MockComponent mockComponent!!.inject(this) } 

Мое приложение было, более или менее, следующим:

 open class MyApplication : Application(), HasActivityInjector { @Inject lateinit var androidInjector : DispatchingAndroidInjector<Activity> lateinit var injectorComponent: InjectorComponent override fun onCreate() { super.onCreate() buildInjector() } open fun buildInjector() { injectorComponent = DaggerInjectorComponent.builder() .dataModule(DataModule()) .appModule(AppModule(this)) .trackerModule(TrackerModule(this, FirebaseAnalytics.getInstance(this))) .build() } override fun activityInjector(): AndroidInjector<Activity> = androidInjector } 

Но теперь я использую другое приложение для своих тестов, где расширяю приложение по умолчанию (TestApplication). В этом приложении я строю другой инжектор:

 class TestApplication : MyApplication() { override fun buildInjector() { injectorComponent = DaggerMockComponent.builder().mockModule(MockModule(this)).build() } } 

Вам понадобится создать MockComponent, который расширяет InjectorComponent и MockModule, который предоставляет все необходимые вам макеты.

Тогда в вашем тесте просто выполните:

 @Before fun setUp() { val app = instrumentation.targetContext.applicationContext as TestApplication (app.injectorComponent as MockComponent).inject(this) } 

Он работает отлично!