Я пробовал это уже неделю. И я просмотрел все доступные статьи, но их реализации или примеры не оправдывают ожиданий или останавливаются на этапах Espresso Tests.
Мое приложение для Android следует архитектуре MVP (и находится на Java)
Сценарий: [Приведу только один пример] У меня есть HomeActivity
, который получает HomePresenter
с помощью Dagger2. (Предоставляет метод в HomeModule
, представленный через void inject(HomeActivity activity)
в HomeComponent
.
В моем тесте espressoTest для HomeActivity
я хотел бы ввести имитацию презентации. Я не раскрыл эти зависимости внутри AppModule
через AppComponent
. которые делают большинство примеров в сети (поэтому они просто создают новое testApplication, а затем делают необходимое)
Я не хочу использовать способ productFlavours для внедрения или предоставления имитационных классов, поскольку он не дает мне контроля над Mockito.when
методами.
Так что в основном. Я хотел бы внедрить mockpresenter, в котором я могу делать с ним все Mockito.when()
s ради моих модульных тестов в эспрессо.
Мой код ниже.
HomeComponent
@HomeScope
@Component(modules = HomeModule.class,dependencies = AppComponent.class)
public interface HomeComponent {
void inject(HomeActivity activity);
}
HomeModule
@Module
public class HomeModule {
private final IHomeContract.View view;
public HomeModule(IHomeContract.View view) {
this.view = view;
}
@Provides
@HomeScope
public IHomeContract.Presenter presenter(FlowsRepository flowsRepository, UserRepository userRepository, LoanRepository loanRepository) {
return new HomePresenter(view, flowsRepository, userRepository, loanRepository);
}
}
Компонент приложения
@Component(modules = {AppModule.class,RepositoryModule.class})
@AppScope
public interface AppComponent {
void inject(App app);
FlowsRepository flowRepository();
LoanRepository loanRepository();
UserRepository userRepository();
}
AppModule
@Module
public class AppModule {
private Context appContext;
public AppModule(@NonNull Context context) {
this.appContext = context;
}
@Provides
@AppScope
public Context context() {
return appContext;
}
}
Приложение
component = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
component.inject(this);
HomeActivity
HomeComponent component = DaggerHomeComponent.builder()
.appComponent(((App) getApplication()).getComponent())
.homeModule(new HomeModule(this))
.build();
Снова. В моих тестах (эспрессо) я хотел бы ввести mockedHomePresenter, установленный Mockito. Так что я могу просто тестировать свои представления.