通過前面2篇文章的學習,我們對JUnit有了初步的認識,下面我們將深入的解析JUnit數據包。 整個JUnit的數據包應該是很強大的,但是一般來說,不一定每個工程都需要這些數據包,而是在JUnit部分數據包的基礎上擴展出自己的數據包,Android SDK中也不例外。 至於JUnit完整的包,這裡我們就不詳細分析了,我們這裡只解析Android SDK中包含的那些JUnit數據包,以及Android SDK在JUnit的基礎上擴展的一些數據包,如下:SDK功能說明

在這些包中最為重要的是:junit.framework、android.test,其中前者是JUnit的核心包,後者是Andoid SDK在Junit.framework的基礎上擴展出來的包,我們將重點解析這2個包。
首先解析junit.framework包,結構如下:
在這些包中最為重要的是:junit.framework、android.test,其中前者是JUnit的核心包,後者是Andoid SDK在Junit.framework的基礎上擴展出來的包,我們將重點解析這2個包。
首先解析junit.framework包,結構如下:
通過這張圖,大家就可以比較清晰的看到JUnit的主要框架,再回去看下上篇文章的例子,對前面的例子感覺明白多了。 做個簡要的總結,如下:
TestSuit:TestSuite是測試用例的集合;
TestCase:定義運行多個測試用例;
TestResult:收集一個測試案例的結果,測試結果分為失敗和錯誤,如果未能預計的斷言就是失敗,錯誤就像一個ArrayIndexOutOfBoundsException異常而導致的無法預料的問題;
TestFailure:測試失敗時捕獲的異常;
Assert:斷言的方法集,當斷言失敗時顯示信息;
TestCase與TestSuite之間的關係,有些類似於圖元對象與容器對象之間的關係,在面向對象的語言C++、JAVA中較常見,在這裡就不多說了。
舉個簡單的例子,並簡要說明過程
第一步:實現TestCase
繼承父類TestCase;
定義一下變量在測試中使用;
在setUp()中初始化這些變量;
在tearDown()中清理這些變量;
public class MathTest extends TestCase{
protected double fValue1;
protected double fValue2;
protected void setUp(){
fValue1= 2.0;
fValue2= 3.0;
}
}
編寫測試單元代碼;
public void testAdd() {
double result= fValue1 + fValue2;
assertTrue(result == 5.0);
}
運行測試用例,這裡有2種方法可以使用:
靜態類型:覆蓋runTes()和定義測試函數。 最常用的就是採用java的匿名類,如下:
TestCase test= new MathTest(”add”){
public void runTest() { testAdd();}
};
test.run();
動態類型:使用反射來實現runTest,它動態地發現並調用的方法,在這種情況下,測試案例的名字對應的測試方法來運行,如下:TestCase= new MathTest(”testAdd”);
test.run();
相比之下,第2種更符合面向對象的思維。
第二步:將TestCase添加到TestSuilt
TestSuite suite= new TestSuite();
suite.addTest(new MathTest("testAdd"));
由於TestSuite可以自動從TestCase中提取測試單元並運行,也可以用如下方法:
TestSuite suite= new TestSuite(MathTest.class);
一個測試用例就完成了,想要更加詳細的了解junit.framework,還是到Android SDK中仔細閱讀。
總結說明
看了這些代碼,再仔細看下JUnit的結構圖,是不是感覺更加清晰了,下一篇幅我們將深入解析android.test包。
沒有留言:
張貼留言