JUnit實施--2.回歸測試框架-JUnit
發表于:2007-07-01來源:作者:點擊數:
標簽:
2. 回歸測試框架-JUnit 通過前面的介紹,我們對JUnit有了一個大概的輪廓。知道了它是干什么的?,F在讓我們動手改寫上面的測試類testCar使其符合 Junit 的規范--能在JUnit中運行。 //執行測試的類(JUnit版)import junit .framework.*;public class testCar
2.
回歸測試框架-JUnit
通過前面的介紹,我們對JUnit有了一個大概的輪廓。知道了它是干什么的?,F在讓我們動手改寫上面的測試類testCar使其符合
Junit的規范--能在JUnit中運行。
//執行測試的類(JUnit版) import
junit.framework.*; public
class testCar extends TestCase { protected int expectedWheels; protected Car myCar; public testCar(String name) { super(name); } protected void setUp() { expectedWheels = 4; myCar = new Car(); } public static Test suite() { /* * the type safe way * TestSuite suite= new TestSuite(); suite.addTest( new testCar("Car.getWheels") { protected void runTest() { testGetWheels(); } } ); return suite; */ /* * the dynamic way */ return new TestSuite(testCar.class); } public void
testGetWheels() { assertEquals(expectedWheels, myCar.getWheels()); } } 改版后的testCar已經面目全非。先讓我們了解這些改動都是什么含義,再看如何執行這個測試。
1>import語句,引入JUnit的類。(沒問題吧)
2>繼承 TestCase ??梢詴簳r將一個TestCase看作是對某個類進行測試的方法的集合。詳細介紹請參看
3>setUp()設定了進行初始化的任務。我們以后會看到setUp會有特別的用處。
4>testGetWheeels()對預期的值和myCar.getWheels()返回的值進行比較,并打印比較的結果。assertEquals是junit.framework.Assert中所定義的方法,junit.framework.TestCase繼承了junit.framework.Assert。
5>suite()是一個很特殊的靜態方法。JUnit的TestRunner會調用suite方法來確定有多少個測試可以執行。上面的例子顯示了兩種方法:靜態的方法是構造一個內部類,并利用構造函數給該測試命名(test name, 如 Car.getWheels ),其覆蓋的runTest()方法,指明了該測試需要執行那些方法--testGetWheels()。動態的方法是利用內?。╮eflection )來實現runTest(),找出需要執行那些測試。此時測試的名字即是
測試方法(test method,如testGetWheels)的名字。JUnit會自動找出并調用該類的測試方法。
6>將TestSuite看作是包裹測試的一個容器。如果將測試比作葉子節點的話,TestSuite就是分支節點。實際上TestCase,TestSuite以及TestSuite組成了一個composite Pattern。 JUnit的文檔中有一篇專門講解如何使用Pattern構造Junit框架。有興趣的朋友可以查看。
如何運行該測試呢?手工的方法是鍵入如下命令:
[
Windows] d:>java junit.textui.TestRunner testCar [
Unix] % java junit.textui.TestRunner testCar 別擔心你要敲的字符量,以后在IDE中,只要點幾下鼠標就成了。運行結果應該如下所示,表明執行了一個測試,并通過了測試:
. Time: 0 OK (1 tests) 如果我們將Car.getWheels()中返回的的值修改為3,模擬出錯的情形,則會得到如下結果: .F Time: 0 There was 1 failure: 1) testGetWheels(testCar)junit.framework.AssertionFailedError: expected:<4> but was:<3> at testCar.testGetWheels(testCar.java:37) FAILURES!!! Tests run: 1, Failures: 1, Errors: 0 注意:Time上的小點表示測試個數,如果測試通過則顯示OK。否則在小點的后邊標上F,表示該測試失敗。注意,在模擬出錯的測試中,我們會得到詳細的測試報告“expected:<4> but was:<3>”,這足以告訴我們問題發生在何處。下面就是你調試,測試,調試,測試...的過程,直至得到期望的結果。
原文轉自:http://www.anti-gravitydesign.com