Как ввести Mocked Presenter в ActivityTest. т.е. тестирование приборов с эспрессо - PullRequest
0 голосов
/ 30 июня 2018

Я пробовал это в течение недели. И я просканировал каждую доступную статью, но их реализации или примеры не дотягивают или останавливаются на шагах Эспрессо-тестов.

Мое приложение для 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. Так что я могу просто протестировать свои взгляды.

1 Ответ

0 голосов
/ 07 июля 2018

Итак. Ваша проблема заключается в том, что вам нужно создать модуль, который предоставляет тестовый докладчик вместо «реального».

Здесь есть хорошая статья: Тестирование с помощью Dagger

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...