您的位置:首页 > 移动开发 > Android开发

Android的Gradle技巧 5.4使用Espresso进行活性测试

2017-07-03 10:47 363 查看
5.4使用Espresso进行活性测试

问题

您想要使用Google的Espresso库来测试Android活动。



将Espresso依赖项添加到Gradle构建中,并编写测试以使用它。

讨论

Espresso测试库已添加到“Android测试工具包”项目中,这是Google Android测试工具的一部分。 Espresso的文档位于wiki。由于Espresso是一个Google项目,专为Android设计,因此可以合理地假设它将来是Android测试的首选机制。

虽然这不是一本关于测试的书,但是设置和运行Espresso测试符合正常的Gradle实践,因此在此包含一个简短的说明。

Espresso包含在Android支持存储库中,它在SDK管理器中的“Extras”下添加。这个过程在配方5.2中的图中说明,在图5-11中重复。

图5-11。使用SDK Manager添加Android支持库

要在项目中使用Espresso,请添加两个androidTestCompile依赖项,如示例5-15所示。

实例5-15。添加Espresso依赖项
dependencies {
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
这实际上导致支持注释库的版本冲突,因为Espresso依赖于版本23.1.1,而SDK 23包括相同库的版本23.3.0。您会收到类似于以下错误的错误:
WARNING: Error:Conflict with dependency
'com.android.support:support-annotations'. Resolved versions for app (23.3.0) and
test app (23.1.1) differ. See http://g.co/androIDstudio/app-test-app-conflict for details.


虽然这可以通过您构建应用程序的时间解决,让我们通过显示如何解决这些柠檬柠檬水。在顶级Gradle构建文件中,只需在allProjects部分强制解析,如例5-16所示。

实例5-16。解决库版本中的冲突
allprojects {
repositories {
jcenter()
}
configurations.all {
resolutionStrategy.force
'com.android.support:support-annotations:23.3.0'
}
}


Espresso还请求您在默认配置块中设置testInstrumentationRunner以使用AndroidJUnitRunner,如在配方5.2中。因此,完整的模块构建文件看起来像示例5-17中所示。

实例5-17。完整的模块build.gradle文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.nfjs.helloworldas"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner
'android.support.test.runner.AndroidJUnitRunner'
}
}
dependencies {
compile 'com.android.support:support-annotations:23.3.0'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}


Espresso测试喜欢使用静态方法,在Espresso类和Hamcrest匹配器中。因此,为了清楚起见,示例5-18中显示的测试包括import语句。

实例5-18。进口Espresso测试
package com.nfjs.helloworldas;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.MediumTest;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.containsString;
@RunWith(AndroidJUnit4.class)
@MediumTest
public class MyActivityEspressoTest
extends ActivityInstrumentationTestCase2<MyActivity> {
public MyActivityEspressoTest() {
super(MyActivity.class);
}
@Rule
public ActivityTestRule<MyActivity> mActivityRule =
new ActivityTestRule<>(MyActivity.class);
@Test
public void testHelloWorld() {
onView(withId(R.id.edit_text))
.perform(typeText("Dolly"));
onView(withId(R.id.hello_button))
.perform(click());
onView(withId(R.id.greeting_text))
.check(matches(withText(containsString("Dolly"))));
}
}
简单的DSL专注于用户行为,而不是活动。从这个测试,不明显的点击按钮实际上从MyActivity类转移到WelcomeActivity类,但事实上发生了。结果如图5-12所示。

图5-12。 Espresso测试结果

再次单击“设备”按钮显示由设备组织的结果,而不是测试,如图5-13所示。

图5-13。 Espresso测试结果按设备组织

Espresso是一种有趣的DSL方法来编写功能测试。它可能是未来的推荐API。

收集测试结果

如果您的应用程序包含多个风格或模块,HTML测试报告将被组织为单独的子目录。这使得单独检查每个单词变得冗长乏味。

幸运的是,有一个插件可用于将所有报告收集到单个构建文件夹中。在顶级构建文件中,在buildscript块之后,包括android-reporting插件。有关详细信息,请参见示例5-19。
实例5-19。添加android-reporting插件

allprojects {
repositories {
jcenter()
}
configurations.all {
resolutionStrategy.force
'com.android.support:support-annotations:23.3.0'
}
}
apply plugin: 'android-reporting' //1


1 Android报表插件将测试报告收集到一个文件中

现在如果你运行mergeAndroidReports任务,一切将被收集到一个单一的文件。

实施例5-20。 合并Android测试报告

> ./gradlew deviceCheck mergeAndroidReports --continue

--continue标志是一个标准的Gradle标志,告诉构建,即使有失败的测试继续。 使用多个变量运行时的结果应类似于图5-14中的结果。

图5-14。 合并来自具有多个变体的应用的测试报告
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息