Я пытаюсь написать тест пользовательского интерфейса с помощью Espresso, у меня есть модель представления, которую мне нужно смоделировать.Но внутри этой смоделированной модели представления есть несколько @Inject
полей, которые являются нулевыми, что вызывает всевозможные проблемы.
Вот сама модель представления (имена изменены и для простоты, но код точно такой же)
public class MyViewModel extends ViewModel {
private final MyFieldRepository myFieldRepository;
@Inject
public MyViewModel(MyFieldRepository myField) {
this.myFieldRepository = myField; //remains null
}
public void start() { //NPE here
myFieldRepository.startAPI() //... async call code
}
}
И модель представления Dagger Module
@Module
public class MyViewModelModule {
@Provides
@IntoMap
@ViewModelKey(MyViewModel.class)
public ViewModel providesMyViewModel() {
MyViewModel myViewModel = Mockito.mock(MyViewModel.class);
return pinPadViewModel;
}
}
И, наконец, полевой модуль (который я хотел ввести)
@Module
public class MyFieldRepositoryModule {
@Provides
@AppScoped
public MyFieldRepository providesMyField() {
MyFieldRepository myField = Mockito.mock(MyFieldRepository.class);
return myField;
}
}
А вот и компоненткод:
@AppScoped
@Component(modules = {
MyViewModelModule.class,
MyFieldModule.class,
})
public interface TestAppComponent extends AndroidInjector<TestApp> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
TestAppComponent build();
}
}
Я хочу найти способ, которым Dagger вводит myField
, используя MyFieldModule
.