您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
用JUnit測試Java類
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2014/2/26 11:54:58 ] 推薦標(biāo)簽:Java類 JUnit測試 單元測試

通過方法名assertXxx你可以讓JUnit知道你想要的結(jié)果,其中Xxx是True、Fase、Equals或者其它條件。JUnit記錄assertXxx方法的通過/失敗狀態(tài),并在執(zhí)行完所有測試后反饋給你。這兒是一些JUnit中有簽名和操作描述的斷言(assert)方法:

assertTrue(String errorMessage, boolean booleanExpression): 檢查booleanExpression值是否為true。如果不是,把errorMessage添加到錯誤報告的顯示列表中。
assertFalse(String errorMessage, boolean booleanExpression): 檢查booleanExpression值是否為false。如果不是,把errorMessage添加到錯誤報告的顯示列表中。
assertEquals(String errorMessage, Object a, Object b): 檢查對象a是否等于對象b,通過equals方法,如果不是,把errorMessage添加到錯誤報告的顯示列表中。對象a是期望值,對象b是要測試的程序?qū)嶋H返回的值。
assertNull(String errorMessage, Object o): 檢查對象o是否為null。如果不是,把errorMessage添加到錯誤報告的顯示列表中。

要查看所有斷言方法的完整列表,請參考Assert類的javadoc文檔(http://www.junit.org/junit/javadoc/index.htm)。

你可以在整個測試代碼中隨意使用assertXxx語句,來確認(rèn)你要測的代碼中某個條件結(jié)果為true(或者false,視情況而定)。

 
五、指定要運行的測試(Specifying Which Tests to Run)

要運行你的測試,你需要:
一個TestRunner類的實例。
一個測試類(例如本例的MyTestClass類)的實例,它包含你要運行的測試的。這個類必須繼承junit.framework.TestCase。
告訴這個TestRunner實例你的MyTestClass實例中哪些測試要運行的途徑。

創(chuàng)建TestRunner的實例和指定MyTestClass實例非常容易,你可以通過下面的命令:
java junit.textui.TestRunner MyTestClass

對別的UI可以用其相應(yīng)的TestRunner代替junit.textui.TestRunner,例如AWT的junit.awtui.TestRunner和Swing的junit.swingui.TestRunner。你還要用你自己的測試類的名字替換MyTestClass。

有兩種途徑可以讓TestRunner知道你要運行MyTestClass類中的哪些測試。一個是顯式途徑,一個是默認(rèn)途徑。在MyTestClass中,你可以選擇是否包含一個public static方法suite,這個方法沒有任何參數(shù),返回Test對象。更準(zhǔn)確地說,它返回一個實現(xiàn)Test接口的對象,因為Test是接口,不是類。大多數(shù)時候你都使用TestSuite和你自己的TestCase子類,TestSuite和TestCase都實現(xiàn)了Test接口。

如果你在MyTestClass方法中省略了suite方法,那么TestRunner通過reflection機制找到MyTestClass類中所有以“test”為前綴命名的方法,并運行它們。這是通知TestRunner要運行哪些測試的默認(rèn)途徑。

如果你在MyTestClass中實現(xiàn)了suite方法,TestRunner調(diào)用suite方法,通過suite方法返回的Test對象,TestRunner獲悉它要進(jìn)行的測試。這是顯式途徑。TestCase和TestSuite類都實現(xiàn)Test接口,意味著你可以只返回一個TestCase,也可以返回一個包含0到多個TestCase/TestSuite的TestSuite,這樣可以進(jìn)行多個測試和層次測試。


在junit.framework.TestCase中指定要運行的測試

在TestCase中有兩種方式可以指定測試方法:一個靜態(tài)一個動態(tài)。靜態(tài)方法是重TestCase的runTest方法,在其中調(diào)用你的測試。例如:

import junit.framework.TestCase;
public class MySimpleTest extends TestCase {
  public MySimpleTest(String name) {
    super(name);
  }
  public void runTest() {
    testTurnLeft();
  }
  public void testTurnLeft() {
    ... code here ...
  }
}

有時簡單靈活的重載TestCase.runTest的方式是用一個匿名內(nèi)部類。下面的代碼描述了這種方式:
TestCase testCase = new MySimpleTest("myNameForTurnLeft") {
  public void runTest() {
    testTurnLeft();
  }
}

匿名內(nèi)部類讓你在實例化test類的類中重載runTest,這樣在不同的地方可以有不同的runTest實現(xiàn),它們都使用MySimpleTest作為實際的測試方法。如果你在test類的suite方法中初始化它自己,這個初始化test類的類是它自己。

通過構(gòu)造器的name參數(shù)可以在TestCase中動態(tài)指定測試方法。對上面的MySimpleTest類,你可以寫成:
TestCase testCase = new MySimpleTest("testTurnLeft");

因為你沒有重載runTest,TestCase類的默認(rèn)實現(xiàn)將通過reflection找到方法testTurnLeft。你可以用任何你喜歡的名字代替“testTurnLeft”。

六、用junit.framework.TestSuite指定多層測試(Specifying a Hierarchy of Tests to Run With junit.framework.TestSuite)

TestSuite類可以把多個測試打包成一組;拘问饺缦拢
TestSuite testSuite = new TestSuite();
testSuite.addTest(new MySimpleTest("testTurnLeft"));
testSuite.addTest(new CalculatorTest("testIsDivisor"));
testSuite.addTest(new TestSuite(MyThirdTest.class));

前兩個addTest方法是直接調(diào)用。TestSuite.addTest方法接受實現(xiàn)Test接口的對象作參數(shù)。MySimpleTest和CalculatorTest類都是TestCase的子類,而TestCase實現(xiàn)Test接口。通過前兩個addTest方法,你只是把兩個測試方法添加到TestSuite實例要執(zhí)行的測試列表中。

第三個addTest調(diào)用描述如何通過在TestSuite實例中包含TestSuite實例來創(chuàng)建層次測試。TestSuite類實現(xiàn)Test接口,所以可以作為addTest方法的參數(shù)。第三個addTest調(diào)用中,新的TestSuite對象包含MyThirdTest類所有的testXxx方法。沒有任何限制要求addTest方法中指定的TestSuite實例是單層列表,子TestSuite還可以包含子TestSuite。

上一頁1234567下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd