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相同的包名