我已经尝试了一个星期。我爬遍了所有可用的文章,但它们的实现或示例都不足或停留在Espresso测试的步骤上。
我的Android应用程序遵循MVP架构(并且是Java编写的)。
场景:【只给一个例子】 我有一个
在我的
我不想使用productFlavours注入或提供mockclasses,因为它不能让我控制
所以基本上,我想注入一个mockpresenter,在其中我可以为了我的espresso单元测试而进行任何
以下是我的代码。
组件名称:HomeComponent
家庭模块
AppComponent
AppModule(应用程序模块)
应用程序
再一次。在我的测试中(使用espresso),我想要注入一个由Mockito设置的mockedHomePresenter。这样我就可以单元测试我的视图。
我的Android应用程序遵循MVP架构(并且是Java编写的)。
场景:【只给一个例子】 我有一个
HomeActivity
,它使用Dagger2获取HomePresenter
。(在HomeModule
中提供方法,并通过HomeComponent
中的void inject(HomeActivity activity)
公开。)在我的
HomeActivity
的espressoTest中,我想注入一个mockpresent。
我没有通过AppComponent
将这些依赖项公开到AppModule
中,这是网络上大多数示例所做的(因此他们只需创建一个新的testApplication,然后执行必要的操作)我不想使用productFlavours注入或提供mockclasses,因为它不能让我控制
Mockito.when
方法。所以基本上,我想注入一个mockpresenter,在其中我可以为了我的espresso单元测试而进行任何
Mockito.when()
。以下是我的代码。
组件名称:HomeComponent
@HomeScope
@Component(modules = HomeModule.class,dependencies = AppComponent.class)
public interface HomeComponent {
void inject(HomeActivity activity);
}
家庭模块
@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;
}
}
应用程序
component = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
component.inject(this);
主页活动
HomeComponent component = DaggerHomeComponent.builder()
.appComponent(((App) getApplication()).getComponent())
.homeModule(new HomeModule(this))
.build();
再一次。在我的测试中(使用espresso),我想要注入一个由Mockito设置的mockedHomePresenter。这样我就可以单元测试我的视图。