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依赖项
虽然这可以通过您构建应用程序的时间解决,让我们通过显示如何解决这些柠檬柠檬水。在顶级Gradle构建文件中,只需在allProjects部分强制解析,如例5-16所示。
实例5-16。解决库版本中的冲突
Espresso还请求您在默认配置块中设置testInstrumentationRunner以使用AndroidJUnitRunner,如在配方5.2中。因此,完整的模块构建文件看起来像示例5-17中所示。
实例5-17。完整的模块build.gradle文件
Espresso测试喜欢使用静态方法,在Espresso类和Hamcrest匹配器中。因此,为了清楚起见,示例5-18中显示的测试包括import语句。
实例5-18。进口Espresso测试
图5-12。 Espresso测试结果
再次单击“设备”按钮显示由设备组织的结果,而不是测试,如图5-13所示。
图5-13。 Espresso测试结果按设备组织
Espresso是一种有趣的DSL方法来编写功能测试。它可能是未来的推荐API。
收集测试结果
如果您的应用程序包含多个风格或模块,HTML测试报告将被组织为单独的子目录。这使得单独检查每个单词变得冗长乏味。
幸运的是,有一个插件可用于将所有报告收集到单个构建文件夹中。在顶级构建文件中,在buildscript块之后,包括android-reporting插件。有关详细信息,请参见示例5-19。
实例5-19。添加android-reporting插件
1 Android报表插件将测试报告收集到一个文件中
现在如果你运行mergeAndroidReports任务,一切将被收集到一个单一的文件。
实施例5-20。 合并Android测试报告
> ./gradlew deviceCheck mergeAndroidReports --continue
--continue标志是一个标准的Gradle标志,告诉构建,即使有失败的测试继续。 使用多个变量运行时的结果应类似于图5-14中的结果。
图5-14。 合并来自具有多个变体的应用的测试报告
问题
您想要使用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。 合并来自具有多个变体的应用的测试报告
相关文章推荐
- Android的Gradle技巧 5.2使用Android测试支持库进行测试
- Android 中的单元测试(使用ServiceTestCase 进行 Service测试 例子)
- 【Android Developers Training】 108. 使用模拟定位进行测试
- [置顶] Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包
- 使用GameBench进行android性能测试
- Android中使用Monkey进行UI或应用程序测试
- 关于使用Robotium进行Android测试的一点小改进
- Android测试原理(三)——使用Eclipse的ADT进行测试
- 关于使用Robotium进行Android测试的一点小改进
- 如何理解、使用Android LogCat以及通过Monkey进行压力测试
- android 使用Monkey进行压力测试
- 使用robotium对android应用进行自动化测试
- 如何理解、使用Android LogCat以及通过Monkey进行压力测试
- Android 中的单元测试(使用AndroidTestCase 进行 Content Provider 测试)
- Android开发使用MockObject进行测试代码
- 在windows下使用cmd命令通过adb shell自动调用android模拟或真机的InstrumentRunner进行android 自动化测试
- 使用eclipse和gradle对Android应用进行批量打包
- 使用jmeter进行性能测试-Jmeter教程及技巧汇总
- 如何使用ServiceTestCase进行Android的Service类型API测试