配置單元測試環境,打開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相同的包名