继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

功能测试框架 espresso

白板的微信
关注TA
已关注
手记 341
粉丝 70
获赞 385

正如

正如Ali Derbane和我写的第一篇关于Android的功能测试的文章中提到的,有许多的框架供你使用. 在这个旅程的第二部分,我将讲解Espresso这个功能测试框架.

简介

Espresso 是在2013年的 GTAC 上首次提出,目的是让开发人员能够快速地写出简洁,美观,可靠的 Android UI 测试。

Espresso有以下几个通用组件:

  • “Espresso”类提供的“onView”和“onData”方法,仅可用于特定接口上测试最优数.

  • ViewMatchers 包含一个实现了Matcher <? super View>接口的对象集合. 使用该类你可以收集或是检查View元素.例如,通过文本 “7” 获取一个View元素(Button).

  • ViewActions 包含了一组viewAction对象,储存了将要在View上执行的动作. 这些动作被传递给ViewInteraction.perform方法,也许包含更多的动作. For 例如, 点击一下View元素(Button).

  • ViewAssertions 包含ViewAssertion集合,用于对Views进行检查.

举个例子说明一下,这些测试组件看起来就像下面这样:

Espresso.onView(ViewMatchers.withText("7")).perform(ViewActions.click());Espresso.onView(withId(R.id.result)).check(ViewAssertions.matches(ViewMatchers.withText("42")));

好消息,去年谷歌推出了集成Espresso的Testing Support Library.因此,让我们通过实现Espresso开始吧.

为了方便解释, 我们要编写一些测试用例来测试Android calculator application这个App. 先来实现一个测试“6”x“7”等于“42”是否正确的普通测试场景。

定义test runner

使用Espresso我们首先需要定义这些测试用例。Espresso使用新的名为AndroidJUnitRunner的测试用例。该测试用例基于“InstrumentationTestRunner”和“GoogleInstrumentationTestRunner”,运行JUnit3和JUnit4来测试你的Android应用程序。

首先将依赖项添加到你的build.gradle文件中, 这里假设你已经安装好了Testing Support Library.

 dependencies {
  androidTestCompile 'com.android.support.test:testing-support-lib:0.1'}

然后添加测试用例到你的build.gradleandroid.defaultConfig配置中

defaultConfig {  ...
  testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}

编写测试

你可能已经想到了,测试类必须在src\androidTest\com.example.package.tests中.包com.example.package是在AndroidManifest文件中指定的属性.

每一个测试类还必须继承抽象类ActivityInstrumentationTestCase2并且使用默认测试的 Activity 作为泛型.

它还需要通过super()方法传递给父类.要使被测试的Activity被测试框架调用,只需要在setup方法中同步调用getActivity()方法.

public class FunctionalInstrumentationTest extends ActivityInstrumentationTestCase2<ActivityToTest> {    public FunctionalInstrumentationTest() {        super(ActivityToTest.class);
    }    @Override
    protected void setUp() throws Exception {        super.setUp();
        getActivity();
    }
}

正如前面提到的,我们想要检查“6”x“7”是否等于“42”.

public void testAnswer_to_the_Ultimate_Question_of_Life_the_Universe_and_Everything() {
        onView(withText("7")).perform(click());
        onView(withText("×")).perform(click());
        onView(withText("6")).perform(click());
        onView(withText("=")).perform(click());

        onView(withId(R.id.resText)).check(matches(withText("42")));
    }

你可能已经注意到,这个示例是使用静态导入.这样做完全是为了使代码更易于阅读.

其他你可能会用到的操作:

  • pressBack(); to simulate the use of the “back” button,

  • isDisplayed(); to check if an element is being shown and

  • scrollTo(); to scroll to an element.

  • pressBack(); 模拟后退按钮

  • isDisplayed(); jian检查某个元素是否显示

  • scrollTo(); 滚动到另外一个元素

运行测试

现在我们做做有趣的,运行测试.这可以通过gradle clean assembleDebug connectedAndroidTest从命令行运行,或者使用Android Studio:

  1. 打开Run菜单 | Edit Configurations

  2. 添加一个新的Android Tests configuration

  3. 选择你需要测试的Module

  4. 定义我们的测试用例: android.support.test.runner.AndroidJUnitRunner

现在你对于Espresso有一些了解了。如果需要深入,可以浏览以下链接:

原文链接:http://www.apkbus.com/blog-705730-62628.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP