Dagger генерирует не-гуавский код в производственном процессе, но Guava-зависимый код для androidTest - PullRequest
0 голосов
/ 02 марта 2020

Я столкнулся со специфической проблемой с Dagger. У меня есть компонент ApplicationComponent для производственного кода, а для инструментальных испытаний он расширен на TestApplicationComponent. Теперь у меня есть привязка на основе карты, настроенная для внедрения модели представления, которая работает нормально, за исключением тестов инструментовки. Для них сгенерированный DaggerTestApplicationComponent заканчивается использованием ImmutableMap в Guava для мультисвязывания, в то время как DaggerApplicationComponent использует для него Collections.unmodifiableMap.

Этот код генерируется в DaggerTestApplicationComponent:

private Map<Class<? extends ViewModel>, Provider<ViewModel>> getMapOfClassOfAndProviderOfViewModel() {
    return ImmutableMap.<Class<? extends ViewModel>, Provider<ViewModel>>of(Foo.class, DaggerTestApplicationComponent.this.bindFooProvider, Barclass, bindBarProvider);
}

И это равный код в DaggerApplicationComponent (MapBuilder.build() возвращает java.util.Map через Collections.unmodifiableMap):

private Map<Class<? extends ViewModel>, Provider<ViewModel>> getMapOfClassOfAndProviderOfViewModel() {
    return MapBuilder.<Class<? extends ViewModel>, Provider<ViewModel>>newMapBuilder(2).put(Foo.class, DaggerApplicationComponent.this.bindFooProvider).put(Bar.class, bindBarProvider).build();
}

Что именно контролирует эту разницу? Есть ли способ заставить тестовый компонент использовать тот же MapBuilder logi c, который используется в производственном компоненте?

...