Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.2——使用Android Testing Support Library进行测试
问题:
你想要测试app的Android组件。
解决方案:
使用新的测试类实现JUnit风格的测试。
讨论:
测试像activities,services等的Android组件,需要将app部署到连接的设备或者模拟器上面。测试类基于JUnit,但是严格意义上不是单元测试。它们是集成测试还是功能测试,取决于你怎么使用。
因为看到这里的目的都是驱使部署的app正常运行并且UI正常改变,功能测试在这比较合适。你可以在文档中经常看到集成测试。
Android Testing Support Library通过SDK Manager作为可选依赖添加:

测试时”Android Support Library“的一部分。测试类在android.support.test包下面。
使用dependencies将所有相关类添加到Gradle配置文件里面:

AndroidJUnitRunner类以及支持JUnit4的注解。你可以在你的测试类上面添加JUnit的@RunWith注解,或者在defaultConfig块下面增加设置:

是用test support类可以很方便的测试layout上面的一个labels。例子如下:
@MediumTest @RunWith(AndroidJUnit4.class)
public class MyActivityLayoutTest
extends ActivityInstrumentationTestCase2<MyActivity> {
private MyActivity activity;
private TextView textView;
private EditText editText;
private Button helloButton;
public MyActivityLayoutTest() { super(MyActivity.class); @Before
public void setUp() throws Exception {
super.setUp()
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
activity = getActivity();
textView = (TextView) activity.findViewById(R.id.text_view);
editText = (EditText) activity.findViewById(R.id.edit_text);
helloButton = (Button) activity.findViewById(R.id.hello_button);
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void testPreconditions() {
assertNotNull("Activity is null", activity);
assertNotNull("TextView is null", textView);
assertNotNull("EditText is null", editText);
assertNotNull("HelloButton is null", helloButton);
}
@Test
public void textView_label() {
final String expected = activity.getString(R.string.hello_world);
final String actual = textView.getText().toString();
assertEquals(expected, actual);
}
@Test
public void editText_hint() {
final String expected = activity.getString(R.string.name_hint);
final String actual = editText.getHint().toString();
assertEquals(expected, actual);
}
@Test
public void helloButton_label() {
final String expected = activity.getString(R.string.hello_button_label);
final String actual = helloButton.getText().toString();
assertEquals(expected, actual);
} }
新的AndroidJUnitRunner是Android Support Test Library的一部分。它增加了对JUnit4的支持,所以可以注解替代老的JUnit3的命名惯例。它有其他额外的能力。详细信息可以查看https://google.github.io/android-testing-support-library/。
属性代表用户界面上的组件。@Before方法查找组件,并将它们分配给属性。文档推荐使用testPreconditions测试,演示组件被找到。测试和其它没有什么区别,只是失败后会很容易找到哪里出错了。
其它测试都从string资源里面查找字符串,和labels里面的值进行比较。注意任何东西都没有被修改,测试大体上是只读的。
最后,@MediumTest注解被用来指示测试方法的大小。只要很短时间的测试用@SmallTest标记,耗时超过100毫秒的是@MediumTest,更长的使用@LargeTest。
通过Gradle,运行那些需要连接设备或者模拟器的测试可以通过connectedCheck任务完成。
例子如下:
> ./gradlew connectedCheck
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:prepareDebugDependencies
// ... lots of tasks ...
:app:packageDebugAndroidTest UP-TO-DATE
:app:assembleDebugAndroidTest UP-TO-DATE
:app:connectedDebugAndroidTest
:app:connectedAndroidTest
:app:connectedCheck
BUILD SUCCESSFUL
输出的报告在app/build/reports/androidTests/connected目录下面。实例报告如下:

实例显示了模拟器的名字,和所有测试的结果。点击”Devices“按钮来切换视图:

Android Support Test Library里面的类可以做更多,并且非常的块。当你想要通过增加数据,点击按钮来驱动UI,有像Robotium和Espresso这样的可以库。
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.2——使用Android Testing Support Library进行测试的更多相关文章
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.5——使用Android Libraries
问题: 你想要在app当中增加新的library模块 解决方案: 使用library插件,增加一个library模块作为依赖. 讨论: 不可以通过使用java库给app增加许多功能,通常是使用jar包 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.7——使用Android Studio签署发布apk
问题: 想要使用Android studio生成签名配置,给他们分配build类型. 解决方案: Build菜单提供了生成签名配置,Project Structure窗口有tab用于分配不同的type ...
- [Android]官网《Testing Support Library》中文翻译
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5048524.html 翻译自 Android Develope ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档
问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试
问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.1——编写自己的任务
问题: 你想用自己的任务定制gradle的构建过程. 解决方案: 在gradle的build文件里面增加task元素.用Android插件支持的extra属性使得开发更容易. 讨论: Gradle的D ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App
问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.4——使用Espresso测试Activity
问题: 你想要使用Google的Espresso测试Activity. 解决方案: 在Gradle配置里面增加Espresso,书写测试脚本. 讨论: Espresso测试库已经被添加进“Androi ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.3——使用Robotium进行功能测试
问题: 你想要使用Robotium库测试activity. 解决方案: 增加Robotium依赖,编写自己的测试脚本. 讨论: Android Test Support Library提供类可以操作a ...
随机推荐
- 【Python 数据分析】pandas数据导入
导入CSV文件数据 环境 C:\Users\Thinkpad\Desktop\Data\信息表.csv 语法 pd.read_csv(filename):从CSV文件导入数据 实现代码 import ...
- Visual studio之C# 利用Settings保存COM口配置信息
背景 利用C#做一个串口通信项目,客户需求保存串口COM口的配置信息,在此利用Settings来进行保存. 正文 ".Settings"的创建 点击项目 --> 添加新项 - ...
- Springmvc UPDATE 数据时 ORA-01858:a non-numeric character was found where a numeric was expected
ORA-01858:a non-numeric character was found where a numeric was expected 异常. 我的代码: 主要是绑定变量带出来的问题. 出错 ...
- Codeigniter 使用 Mysql 存储过程
本篇文章由:http://xinpure.com/codeigniter-using-mysql-stored-procedures/ 执行存储过程 $query = $this -> db - ...
- 严重: Exception starting filter struts2 Unable to load configuration. - [unknown location]
一般来说,按照这个流程下来是没有错的:SSH三大框架合辑的搭建步骤 但是,近来的一个测试例子出现了以下这个问题,困扰了许久!! 各种百度&各种问同学,最后请教了张老师后问题得到解决: 1.这种 ...
- 大规模分布式数据处理平台Hadoop的介绍 一种可靠、高效、可伸缩的处理方案
http://www.nowamagic.net/librarys/veda/detail/1767 Hadoop是什么 Hadoop原来是Apache Lucene下的一个子项目,它最初是从Nutc ...
- unity3d的GUILayout布局
GUILayout默认采用线性布局,从上到下.可以参见<unity3d常用控件> 如果要实现横向布局,则需要添加如下代码: GUILayout.BeginHorizontal (); // ...
- hbase replication原理分析
本文只是从总体流程来分析replication过程,很多细节没有提及,下一篇文章准备多分析分析细节. replicationSource启动过程 org.apache.hadoop.hbase.r ...
- iOS开发值NSUserDefaults类概述
NSUserDefaults类概述 NSUserDefaults类为和默认的系统进行交互提供了一个系统编程接口.默认的系统允许一个应用来定制它的行为以适应用户的喜好.例如,你可以允许用户去决定你的应用 ...
- 大型跨境电商 JVM 调优经历
前提: 某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner.经过618大促之后,和运维的同学讨 ...