Я пробовал это в течение недели. И я просканировал каждую доступную статью, но их реализации или примеры не дотягивают или останавливаются на шагах Эспрессо-тестов.
Мое приложение для Android соответствует архитектуре MVP (и находится на Java)
Сценарий: [Давать только один пример]
У меня есть HomeActivity
, который получает HomePresenter
с помощью Dagger2. (Предоставляет метод в HomeModule
, выставленный через void inject(HomeActivity activity)
в HomeComponent
.
В моем эспрессо-тесте на HomeActivity
я бы хотел добавить имитацию.
Я не раскрывал эти зависимости внутри AppModule
через AppComponent
. что делает большинство примеров в сети (поэтому они просто создают новое приложение testApplication, а затем выполняют необходимое)
Я не хочу использовать метод productFlavours для внедрения или предоставления mocclasses, так как он не дает мне контроль над Mockito.when
методами.
Так что в основном. Я хотел бы ввести имитатора, в котором я могу делать с ним все, что угодно Mockito.when()
с, для моих модульных тестов в эспрессо.
Мой код указан ниже.
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);
}
}
AppComponent
@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;
}
}
App
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. Так что я могу просто протестировать свои взгляды.