美文网首页
深入浅出Android单元测试(五)Espresso进行UI测试

深入浅出Android单元测试(五)Espresso进行UI测试

作者: 程序引力 | 来源:发表于2018-11-23 23:45 被阅读31次
安卓机器人

需要对Android界面UI进行测试?本文对以最易懂的方式介绍Espresso框架。

若有错漏,烦请斧正。转载请注明出处。欢迎关注程序引力

Espresso核心概念

在Espresso中,主要有两个对象,分别是:

  • ViewInteraction:表示在Espresso中的一个特定的View
  • DataInteraction:表示在Espresso中一个特定的Data对象

为了构造这两种对象,Espresso提供了两种方法,分别是:

  • onView:构造ViewInteraction对象,该方法接受Matcher对象作为参数,例如
onView(withId(R.id.editTextView))
  • onData:构造DataInteraction对象,该方法接受Matcher对象作为参数,例如
onData(is(instanceof(DataBean.class))

通过上面的方法就可以获得相应的Interaction对象,得到这个对象后才可以进行后面的测试。

这两个对象均有两个方法,分别是:

  • perform(): 执行对象的某个动作。该方法接受ViewAction的对象作为动作参数
  • check():校验动作执行后的结果。该方法接受ViewAssertion的对象作为校验参数

Espresso核心流程

对View进行UI测试的核心流程

onView() -> perform() -> check()

即创建ViewInteration对象,执行UI动作,最后校验动作结果是否符合预期
写成链式调用的形式,就是:

onView().perform().check()

对Data进行UI测试的核心流程

onData() -> DataOptions -> perform() -> check()

即创建DataInteration对象,之后执行一些数据处理,然后执行UI动作,最后校验动作结果是否符合预期
写成链式调用的形式,就是:

onView().someMethod().perform().check()

Espresso简单示例

View示例

onView(withId(R.id.my_view))            // withId(R.id.my_view)是一个匹配器Matcher
        .perform(click())               // click()是一个动作ViewAction
        .check(matches(isDisplayed())); // matches(isDisplayed())是一个校验器

从上面的简单实例中,可以看出也是链式调用,该调用分为三步:

  • 通过withId方法传入一个view的ID后,得到一个Matcher对象,并将该对象传给onView获得ViewInteraction对象。
  • 调用ViewInteraction对象的perform方法,并传入一个ViewAction,例如一个点击操作click就是一个ViewAction.
  • 调用ViewInteraction对象的check方法对结果进行校验。其中matches是一种校验器。

实践

引入依赖

在模块(如app)的build.gradle中添加

dependencies {
    // Espresso 核心包
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
    // Espresso 同时依赖JUnit与AndroinUnitRunner
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
}

为了保证UI测试结果可靠,Android建议在开发者模式中将设备的动画都关闭,包括窗口动画缩放、过度动画缩放与动画程序时长调整。

附录

Espresso相关包:

  • espresso-core: 核心包,以及View的动作、匹配等api依赖库
  • espresso-web:提供了对webview的支持
  • espresso-idling-resource: 提供了对在需要同步等待后台场景的UI测试支持
  • espresso-contrib:外部库,增加了对RecycleView,DatePicker等支持
  • espresso-intents: 提供了模拟传入intent场景的支持
  • espresso-remote: 提供了对Espresso多进程功能的支持

相关文章

网友评论

      本文标题:深入浅出Android单元测试(五)Espresso进行UI测试

      本文链接:https://www.haomeiwen.com/subject/bhxeqqtx.html