android-espresso – AndroidInjector和Espresso

android-espresso – AndroidInjector和Espresso,第1张

概述使用 AndroidInjector和Subcomponents使得无法将对象范围内的活动注入到Espresso的Test类中. 以前使用应用程序级组件和活动组件,只要创建继承活动组件的测试组件,就可以为不是活动的测试类调用inject(). 例: 活动组件 @ActivityScope@Component( dependencies = ApplicationComponent.cla 使用 AndroidInjector和Subcomponents使得无法将对象范围内的活动注入到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);}

测试模块

@Modulepublic 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 Test中使用它们?我希望能够访问像“ServiceGateway”这样的对象.上面的“NowPlayingPresenter”并在测试中使用它们.模拟,间谍或空闲资源.上面例子中我的空闲资源是“NowPlayingPresenter”具体实现,我在每次单独的测试中都会传递给espresso.

解决方法 前几天我设法使用自定义测试运行器进行了一些Hacky方法解决了这个问题.第一件事是拥有一个 TestRunner for faking the Android Application.现在你可以简单地扩展你的主app类并覆盖onCreate(),注入一个返回模拟实例而不是真实实例的 component built especially for testing. 总结

以上是内存溢出为你收集整理的android-espresso – AndroidInjector和Espresso全部内容,希望文章能够帮你解决android-espresso – AndroidInjector和Espresso所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1123986.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存