当前位置: 首页 > 知识库问答 >
问题:

雄激素注射器和浓缩咖啡

颛孙俊
2023-03-14

使用AndroidInjector和子组件使得无法将objected的activity作用域注入到Espresso的测试类中。

以前,在使用应用程序级组件和activity组件时,只要创建继承了activity组件的测试组件,就可以调用inject()来测试不是活动的类。

示例:

activity成分

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

测试类html" target="_blank">组件

@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);

人们如何获得activity模块的访问,是自动生成的,并使用他们在espresso UI测试?我想要访问像上面的“ServiceGateway”和“NowPlayingPresenter”这样的对象,并在测试中利用它们。模拟、间谍或闲置资源。上面示例中的空闲资源是“NowPlayingPresenter”的具体实现,我在每个单独的测试期间传递给espresso。

共有1个答案

何海
2023-03-14

前几天我用一个自定义的测试运行器,用一个简单的方法解决了这个问题。第一件事是有一个测试者来伪造Android应用程序。现在,您可以简单地扩展主app类并重写oncreate(),注入一个专门为测试构建的组件,该组件返回模拟实例而不是真实实例

 类似资料:
  • 在我的主要活动中,我有initUi函数,它将触发对webviewActivity的意图,在webviewActivity中,有一个FragWebView,其中加载了url。 以下是来自FragWebView的示例代码: 我从我的主要活动中传递打开webview的意图是: 请让我知道如何解决这个问题。 问候

  • 当我试图编写一个与listview项交互的代码时,我得到了一个OmbyuousViewMatcherException异常。场景如下。 我有一个包含两个视图的listview 文本视图 按钮查看 我在列表中有将近250行。所有按钮都有文本“预订”或“取消”。他们在一个洗牌的顺序。我想直接点击列表中的第一个“预订它”按钮。我已经尝试了很多方案,但仍然无法找到解决方案。拜托谁帮帮我。 下面是我现在的代

  • 我试着用“浓缩咖啡”写简单的测试 但我有个错误: 我正在尝试不同的框架进行测试,对我来说是最好的,但如果有人能帮助修复这个错误,我将非常感激

  • 本文向大家介绍Android 设置意式浓缩咖啡,包括了Android 设置意式浓缩咖啡的使用技巧和注意事项,需要的朋友参考一下 示例 在build.gradle您的Android应用模块的文件中,添加下一个依赖项: 在文件中AndroidJUnitRunner为testInstrumentationRunner参数指定build.gradle。 此外,添加此依赖项以提供意图模拟支持 并将其添加为w

  • 我正在尝试通过仪器测试运行浓缩咖啡(使用双意式浓缩咖啡)并通过Robolectric进行单元测试。到目前为止,我所拥有的主要基于甲板分级的例子。 注意:Gradle 1.10 我的目录结构如下,其中需要作为com.example.app运行。数据作为: 因此,当我运行时,我收到错误,无法识别中的浓缩咖啡导入。 当我运行 时,我收到错误,无法识别 中的 JUnit4 注释.java()。 如果我把任

  • 在Espresso中,应用程序启动,测试以以下代码开始:onView(withId(r.id.choosebooktitle)).perform(click()); 这会崩溃,因为显示器仍然显示启动屏幕,而chooseBookTitle只有在之后才可见。如何防止谷歌-浓缩咖啡会在它出现之前点击键? (我不想插入等待循环,而是保持事件驱动。在更糟糕的情况下,我回到Robotium)