代码之家  ›  专栏  ›  技术社区  ›  Dziugas

如何编写在运行时确定视图内容的Android UI测试?

  •  1
  • Dziugas  · 技术社区  · 7 年前

    用户从列表中选择课程名称,然后进入另一个屏幕,进一步指定他们当前所在的课程的年份、组等。选择课程和编辑课程详细信息的屏幕如下:

    enter image description here

    enter image description here


    目标

    Google I/O 17 talk on Test-Driven Development on Android


    问题

    测试,使用 Espresso ,对于选择题为“会计与金融”的课程,并查看下一个屏幕上是否显示正确的标题的具体情况,将(大致)如下所示:

    @Test
    public void chooseCourse() {
        onView(withId(R.id.rv_course_list))
                .perform(RecyclerViewActions.actionOnItemAtPosition(
                        /*Somehow find position of Accounting and Finance*/,
                        click())
                );
    
    
        onView(withId(R.id.course_title))
                .check(matches(withText("Accounting and Finance")))
                .check(matches(isDisplayed()));
    }
    

    RecyclerView

    考虑到这一点,我无法将课程名称硬编码到测试中。请注意 在这里,我将模拟获取课程列表的依赖性,以确保“会计和财务”在列表中(可能只是隔离 ChooseCourseActivity 类,捕获其 Intent

    在我上面链接的视频中,演示者向我们介绍了notes应用程序的添加注释功能的UI测试,测试如下:

    1. 点击“添加注释”按钮
    2. 输入注释的标题和说明
    3. 验证列表中是否包含带有步骤2详细信息的新注释

    在这种情况下,硬编码用于查找视图的文本(标题和描述)效果很好,因为测试中的代码 确定


    这个问题

    • 在实现choose course功能之前,我如何为其编写足够的UI测试?
    • 我是否只是误解了UI测试,应该嘲笑依赖关系(即使视频中的演讲者没有)?

    编辑 :这个问题的最佳解决方案似乎是所谓的“气密测试”和 this blog 描述如何将其应用于android UI。

    1 回复  |  直到 7 年前
        1
  •  2
  •   jdonmoyer    7 年前

    你可以用几种不同的方法来测试,我已经在我的应用程序中使用了所有这些方法的组合。

    1) 您可以按照建议模拟您的网络/数据库层。

    2) 您可以在测试中调用API以获取“预期”数据集,然后验证它是否正确显示在UI中。

    3) 您可以存根您的网络层,以允许您注入已知数据,而不依赖于您的网络端点。特别是改装使这一点非常容易做到。