功能测试框架 espresso
正如 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 andscrollTo()
; to scroll to an element.pressBack()
; 模拟后退按钮isDisplayed()
; jian 检查某个元素是否显示scrollTo()
; 滚动到另外一个元素
运行测试
现在我们做做有趣的,运行测试.这可以通过 gradle clean assembleDebug connectedAndroidTest
从命令行运行,或者使用 Android Studio:
- 打开 Run 菜单 | Edit Configurations
- 添加一个新的 Android Tests configuration
- 选择你需要测试的 Module
- 定义我们的测试用例:
android.support.test.runner.AndroidJUnitRunner
现在你对于 Espresso 有一些了解了。如果需要深入,可以浏览以下链接:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论