Android Testing学习02 HelloTesting 项目建立与执行
Android Testing学习02 HelloTesting 项目建立与执行
Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程。
下面,新建一个Android待测试的项目,即普通的Android工程,这里起名为:MainProject;
新建测试工程
再建一个测试项目,叫MainProjectTest,对MainProject进行测试。
可以直接右键New->Project…->Android Test Project:

项目名起为:MainProjectTest
点击Next,选择要测试的项目为待测试的项目,这里即为MainProject。
选择好后,测试项目就建立成功了。

IDE帮我们做了什么?
测试项目虽然建立成功了,但是IDE帮我们做了什么呢?
首先,比较明显的是生成了对应的包名,在原来的包名后加了.test:
com.shengqishiwind.myproject.test
其次,打开测试项目的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shengqishiwind.myproject.test"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.shengqishiwind.myproject" /> <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application> </manifest>
AndroidManifest.xml
解释标注如下:

最后一个改变,右键MainProjectTest项目,Properties->Java Build Path->Projects,可以看到已经加入了MainProject,引入了被测试工程,所以测试工程可以访问被测试工程的类。

创建测试
创建测试仍然可以直接利用IDE:
在测试项目的包上右键->New->JUnit Test Case:
创建如下:

点击Next,可以选择生成一些方法,到时候按照需要选择吧。

生成的测试类代码如下,加上了print语句:
package com.shengqishiwind.myproject.test; import junit.framework.TestCase; public class MyFirstTest extends TestCase
{ public MyFirstTest(String name)
{
super(name);
System.out.println("MyFirstTest");
} protected void setUp() throws Exception
{
super.setUp();
System.out.println("setUp()");
} protected void tearDown() throws Exception
{
super.tearDown();
System.out.println("tearDown()");
} public void testSomething()
{
System.out.println("testSomething()");
fail("Not implemented yet"); } }
因为单元测试框架是基于JUnit 3的,所以方法需要以test开头。
这里插一段:
在JUnit 3.8中,测试方法需要满足如下原则:
1.public的。
2.void的。
3.无方法参数。
4.方法名称必须以test开头。 (它通过反射找出所有方法,然后找出以test开头的方法)。
运行测试
1.最简单的方法:运行所有测试:
右键测试项目Run As ->Android JUnit Test。
这样将运行项目中所有的测试。
2.运行一些test case:
右键项目:Run As -> Run Configurations,然后在其中选择Run a single test.
这里看到也可以自选一些test case来一起运行。
运行后的结果在左边的JUnit小窗口中显示,LogCat中也有相关显示。
3.通过命令行来运行测试
先adb shell之后就可以通过如下命令行命令来运行测试:
测试结果只能从LogCat中查看了。
am instrument [flags] <COMPONENT>
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e <NAME> <VALUE>: set argument <NAME> to <VALUE>
-p <FILE>: write profiling data to <FILE>
-w: wait for instrumentation to finish before returning
关于命令参数的更多,可以查看:http://developer.android.com/tools/testing/testing_otheride.html
和 http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
参考资料
《Android Application Testing Guide》
Android Testing官网链接:
http://developer.android.com/tools/testing/index.html
http://developer.android.com/tools/testing/activity_test.html
http://developer.android.com/tools/testing/testing_otheride.html
Testing Fundamentals
http://developer.android.com/tools/testing/testing_android.html
AndroidTestCase
http://developer.android.com/reference/android/test/AndroidTestCase.html
ViewAsserts
http://developer.android.com/reference/android/test/ViewAsserts.html
MoreAsserts
http://developer.android.com/reference/android/test/MoreAsserts.html
正则表达式:
http://developer.android.com/reference/java/util/regex/package-summary.html
InstrumentationTestRunner文档,其中有命令行运行测试相关:
http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
关于JUnit 3的基础,本博客之前有文:
http://www.cnblogs.com/mengdd/archive/2013/03/26/2983565.html
博客:
http://mintelong.iteye.com/blog/460903
http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/
Android Testing学习02 HelloTesting 项目建立与执行的更多相关文章
- Android Testing学习01 介绍 测试测什么 测试的类型
Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...
- android菜鸟学习笔记16----Android项目打包安装过程(Run as Android Application)
右击项目名称,Run as Android Appication之后,Android项目打包安装过程: 1.打包生成.apk文件: 1)把源码中的.java文件编译生成.class文件 2)将所有的. ...
- android菜鸟学习笔记4----android项目结构
src: 应用程序源代码存放目录 gen: 自动生成的目录,目录中存放所有由Android开发工具自动生成的文件. 目录中最重要的就是R.java文件. 这个文件由Android开发工具自动产生的.A ...
- android开发学习---基础知识学习、如何导入已有项目和开发一个电话拨号器
一.基础知识点学习 1.Android体系结构 如图所示,android 架构分为三层: (1)最底层是linux内核,主要是各种硬件的驱动,如相机驱动(Camera Driver),闪存驱动(Fl ...
- Flutter实战视频-移动电商-02.Flutter实战建立项目和编写入口文件
02.Flutter实战建立项目和编写入口文件 创建项目: flutter create flutter_shop 创建完成之后呢,它会提示我们, 进入flutter_shop的目录,然后执行flut ...
- Android Studio安卓学习笔记(一)安卓与Android Studio运行第一个项目
一:什么是安卓 1.Android是一种基于Linux的自由及开放源代码的操作系统. 2.Android操作系统最初由AndyRubin开发,主要支持手机. 3.Android一词的本义指“机器人”, ...
- android studio学习----添加项目依赖包总结
Gradle Library Projects Gradle 项目可以依赖于其它组件.这些组件可以是外部二进制包,或者是其它的 Gradle 项目. 在本例中, app/build.gradle 中有 ...
- Android Animation学习(二) ApiDemos解析:基本Animators使用
Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
随机推荐
- 第1/24周 SQL Server 如何执行一个查询
大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要, ...
- SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)
SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...
- ElasticSearch 配置详解
配置文件位于es根目录的config目录下面,有elasticsearch.yml和logging.yml两个配置,主配置文件是elasticsearch.yml,日志配置文件是logging.yml ...
- DirectShowNet 使用摄像头录像+录音
http://www.cnblogs.com/endv/p/6052511.html // ------------------------------------------------------ ...
- 遗传算法的简单应用-巡回旅行商(TSP)问题的求解
上篇我们用遗传算法求解了方程,其中用到的编码方式是二进制的编码,实现起来相对简单很多, 就连交配和变异等操作也是比较简单,但是对于TSP问题,就稍微复杂一点,需要有一定的策略, 才能较好的实现. 这次 ...
- 【iOS】Object-C注释
与其他语言一样,Object-C的注释也分为两种,一种是普通注释,一种是文档注释,普通注释通常给阅读代码的人看,而文档注释可以被appledoc识别,在使用的时候xcode能给出智能提示 简单注释 1 ...
- 了解WP的传感器
之前看到老大的一个QQ签名,说想写一个WP的程序,可是后来,后来就没有后来了.我去年打算学一下WP程序开发的,一年了也无任何进展,我可不想后来,后来就没有后来.于是抽时间来接触一下.虽然都是用CShs ...
- Oracle Error - "OCIEnvCreate failed with return code -1 but error message text was not available".
ISSUE: When trying to connect to an Oracle database you receive the following error: "OCIEnvCre ...
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
- ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化
首先,先简单的谈一下什么是序列化与反序列化,序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通 ...