gpt4 book ai didi

android-espresso - AndroidInjector 和 Espresso

转载 作者:行者123 更新时间:2023-12-01 06:02:41 25 4
gpt4 key购买 nike

使用 AndroidInjector 和 Subcomponents 无法将作用域对象的事件注入(inject) Espresso 的 Test 类。

以前使用应用程序级组件和事件组件,只要您创建一个继承事件组件的测试组件,您就可以为不是事件的测试类调用注入(inject)()。

例子:

事件组件

@ActivityScope
@Component(
dependencies = ApplicationComponent.class,
modules = {
NowPlayingActivityModule.class
})
public interface NowPlayingActivityComponent {
void inject(NowPlayingActivity activity);
}

测试类组件
@ActivityScope
@Component(
dependencies = TestApplicationComponent.class,
modules = {
TestNowPlayingActivityModule.class,
ActivityModule.class
})
public interface TestNowPlayingActivityComponent extends NowPlayingActivityComponent {
void inject(NowPlayingActivityTest nowPlayingActivityTest);
}

测试模块
@Module
public class TestNowPlayingActivityModule {
private NowPlayingActivityModule nowPlayingActivityModule;

public TestNowPlayingActivityModule(NowPlayingActivityModule nowPlayingActivityModule) {
this.nowPlayingActivityModule = nowPlayingActivityModule;
}

@Provides
@ActivityScope
public ServiceGateway providesServiceGateway(ServiceApi serviceApi) {
return nowPlayingActivityModule.providesServiceGateway(serviceApi);
}

@Provides
@ActivityScope
public NowPlayingPresenter providesNowPlayingPresenter(NowPlayingInteractor nowPlayingInteractor) {
//In order to make sure espresso idles the view checks, we put the IdlingResource on the presenter.
return Mockito.spy(new NowPlayingPresenterImpl_IdlingResource(nowPlayingActivityModule.getNowPlayingViewModel(),
nowPlayingInteractor));
}
}

在测试类
TestNowPlayingActivityComponent mockNowPlayingActivityComponent = DaggerTestNowPlayingActivityComponent.builder()
.testApplicationComponent((TestApplicationComponent) mvpExampleApplication.getComponent())
.testNowPlayingActivityModule(new TestNowPlayingActivityModule(nowPlayingActivityModule))
.build();

mockNowPlayingActivityComponent.inject((NowPlayingActivity) activity);
mockNowPlayingActivityComponent.inject(NowPlayingActivityTest.this);

人们如何访问自动生成的事件模块并在 espresso UI 测试中使用它们?我想访问上面的“ServiceGateway”和“NowPlayingPresenter”等对象并在测试中使用它们。模拟、 spy 或空闲资源。在上面的示例中,我的空闲资源是我在每次单独测试期间传递给 espresso 的“NowPlayingPresenter”具体实现。

最佳答案

前几天我设法使用自定义测试运行器通过一种有点hacky的方法解决了这个问题。首先是拥有一个TestRunner for faking the Android Application .现在您可以简单地扩展您的主应用程序类并覆盖 onCreate() , 注入(inject) component built especially for testing返回模拟实例而不是真实实例。

关于android-espresso - AndroidInjector 和 Espresso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43729039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com