正如Ali Derbane和我写的第一篇关于Android的功能测试的文章中提到的,有许多的框架供你使用. 在这个旅程的第二部分,我将讲解Espresso这个功能测试框架.
Espresso 是在2013年的 GTAC 上首次提出,目的是让开发人员能够快速地写出简洁,美观,可靠的 Android UI 测试。
Espresso有以下几个通用组件:
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”是否正确的普通测试场景。
使用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:
android.support.test.runner.AndroidJUnitRunner
现在你对于Espresso有一些了解了。如果需要深入,可以浏览以下链接:
扫一扫
在手机上阅读