Android单元测试Junit (一)
1、在eclips中建立一个Android工程,具体信息如下:

2、配置单元测试环境,打开AndroidManifest.xml,具体代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.milan.junit"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.milan.junit.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--使用单元测试库-->
<uses-library android:name="android.test.runner"/>
</application>
<!-- 声明Android框架和目标测试包-->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.milan.junit" />
</manifest>
说明:
1、<uses-library android:name="android.test.runner"/> 这句,放在application内部。
2、android:targetPackage 这个属性,一般为应用程序的包名,必须和xml中manifest节点的package同名。
3、创建一个包com.milan.service,这个包下面再创建一个类 Person,用于测试的时候调用。
package com.milan.service;
public class Person {
public int getAge(String age){
return new Integer(age);
}
}
4、在com.milan.junit包下面,建一个PersonTest类,代码如下:
package com.milan.junit;
import com.milan.service.Person;
import android.test.AndroidTestCase;
public class PersonTest extends AndroidTestCase {
///用例1,传入非数字
public void test01(){
Person person = new Person();
person.getAge("milan");
}
//用例2,传入数字
public void test02(){
Person person = new Person();
person.getAge("1");
}
}
5、选中PersonTest.java,右键选择Run As 选择Android Junit Test 运行单元测试,如图:

从上图可以看到,test01的测试结果为失败。失败原因为:java.lang.NumberFormatException: Invalid int: "milan",
test02的测试结果为通过。
如果没有Junit运行结果,可以在eclips的Window菜单下,选择Show View--Other--Java--Junit 中打开。
6、运行单个测试用例
eclips的Window菜单下,选择Show View--Other--General--Outline打开大纲视图,右键测试用例,即可运行单个测试用例。如图:

同理,如果需要执行整个项目的测试用例,可选中整个项目,用Android Junit Test运行即可。
7、断言
当我们获得程序的运行结果,我们希望Junit能够自动判断 将实际结果和期望结果是否一致。这个时候我们就可以用到Junit自带的断言。
修改PersonTest类,为以下代码:
package com.milan.junit;
import com.milan.service.Person;
import android.test.AndroidTestCase;
public class PersonTest extends AndroidTestCase {
///用例1,传入非数字
public void test01(){
Person person = new Person();
int i= person.getAge("milan");
assertEquals(1, i);
}
//用例2,传入数字,断言有message
public void test02(){
Person person = new Person();
int i= person.getAge("1");
assertEquals("传入数字",2,i);
}
//用例2,传入数字,断言无message
public void test03(){
Person person = new Person();
int i= person.getAge("1");
assertEquals(1,i);
}
}
然后运行结果为:

如果传入了message,一旦用例不通过,会在右边的错误详细里,列出message。
8、其他断言
JUnit提供丰富的断言,来满足我们不同的比对需求。按住Ctrl键,点击代码中的assertEquals,可以看到Assert类里面多支持的断言函数的参数类型:

大家有空可以多试试。这里就不一一讲解了。
其他信息
如出现Test run failed:Unable to find instrumentation target package错误
是因为 android:targetPackage="com.milan.junit" 必须和
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.milan.junit"
package相同的包名
Android单元测试Junit (一)的更多相关文章
- Android:单元测试Junit的配置
在实际开发中,开发android软件的过程需要不断地进行测试.而使用Junit测试框架,侧是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性.... ...
- Android 单元测试Junit
- 阿里知识储备之二——junit学习以及android单元测试
一,junit框架 http://blog.csdn.net/afeilxc/article/details/6218908 详细见这篇博客 juit目前已经可以和maven项目进行集成和测试,而且貌 ...
- Android随笔之——Android单元测试
在实际开发中,开发android软件的过程需要不断地进行测试.所以掌握Android的单元测试是极其重要的.您应该把单元测试作为Android应用开发周期的一部分,精心编写的测试可以在开发早起帮你发现 ...
- Android单元测试实践
为什么要写单元测试 首先要介绍为什么蘑菇街支付金融这边会采用单元测试的实践.说起来比较巧,刚开始的时候,只是我一个人会写单元测试.后来老板们知道了,觉得这是件 很有价值的事情,于是就叫我负责我们组的单 ...
- Android单元测试
安卓单元测试总结文章,目测主要会cover以下的主题: 什么是单元测试 为什么要做单元测试 JUnit Mockito Robolectric Dagger2 一个具体的app例子实践 神秘的bonu ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- Android(java)学习笔记165:Android的Junit调试
编写android应用的时候,往往我们需要编写一些业务逻辑实现类,但是我们可能不能明确这个业务逻辑是否可以成功实现,特别是逻辑代码体十分巨大的时候,我们不可能一行一行检查自己的代码,为了解决这样的问题 ...
- Android单元测试: 首先,从是什么开始
Android单元测试: 首先,从是什么开始 http://chriszou.com/2016/04/13/android-unit-testing-start-from-what.html 这是一系 ...
随机推荐
- MEF初体验之二:定义组合部件和契约
组合部件 在MEF中,一个组合部件就是一个组合单元,组合部件"出口"其它组合部件需要的服务并且从其它部件"进口"需要的服务.在MEF编程模型中,为了声明组合部件 ...
- Windows Phone 8 应用内截图
WriteableBitmap wb = new WriteableBitmap(this.LayoutRoot, new MatrixTransform()); //wb.Render(this.L ...
- hdu3480二维斜率优化DP
Division Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 999999/400000 K (Java/Others) Tota ...
- android在当前app该文件下创建一个文件夹
/********************************************************************* * Author : Samson * Date ...
- Web在线视频方案浅谈
写在前面 最近因为项目预研,花时间和精力了解并总结了现如今web在线视频的一些解决方案,由于资历薄浅,措辞或是表述难免出现遗漏,还望各位海涵,有好的建议或方案还望赐教,定细心学习品位. 如今的web技 ...
- 好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
用ssh登录一个机器(换过ip地址),提示输入yes后,屏幕不断出现y,仅仅有按ctrl + c结束 错误是:The authenticity of host 192.168.0.xxx can't ...
- (2)虚拟机下hadoop1.1.2集群环境搭建
hadoop集群环境的搭建和单机版的搭建差点儿相同,就是多了一些文件的配置操作. 一.3台主机的hostname改动和IP地址绑定 注意:以下的操作我都是使用root权限进行! (1)3太主机的基本网 ...
- java 7K交通灯管理系统面试题
交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往 ...
- 内存四个领域,变量声明和定义,注册,c内联汇编,auto,堆,不变,静态变量
1.内存四大区域 2.在程序中,变量的声明能够有多份,定义仅仅能有一份 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVh ...
- hdu 2141 Can you find it?(二分查找变例)
Problem Description Give you three sequences of numbers A, B, C, then we give you a number X. Now yo ...