您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
Junit--Junit In Action 筆記
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/7/8 11:23:18 ] 推薦標(biāo)簽:

Junit區(qū)分失敗和錯(cuò)誤.失敗是可以預(yù)期的,代碼中的改變不會(huì)造成斷言失敗.你只要修正代碼,斷言可以通過(guò).
但是錯(cuò)誤(比如常規(guī)程序拋出的異常)則是測(cè)試時(shí)不能預(yù)料的.
當(dāng)遇到錯(cuò)誤,好的分析步驟是:
            檢查環(huán)境;
            檢查測(cè)試;
            檢查代碼;
2.5 用TestListener來(lái)觀察結(jié)果
TestResult收集了測(cè)試的信息,TestRunner負(fù)責(zé)報(bào)告信息. Junit 提供了TestListener接口,以幫助對(duì)象訪問(wèn)TestResult
并創(chuàng)建有用的報(bào)告.
TestRunner實(shí)現(xiàn)了TestListener,很多特定的Junit擴(kuò)展也實(shí)現(xiàn)了TestListener 可以有任意數(shù)量的TestListener向Junit
框架注冊(cè).這些TestListener可以根據(jù)TestResult提供的信息做它需要做的任何事情

2.6 用TestCase來(lái)工作
概括的說(shuō),Junit的工作過(guò)程是由TestRunner來(lái)運(yùn)行包含一個(gè)或多個(gè)TestCase的TestSuite,但是在常規(guī)工作中,你只和
TestCase打交道.
典型的TestCase包含兩個(gè)部件:fixture和單元測(cè)試
2.6.1 用Fixture來(lái)管理資源
有些測(cè)試需要一些資源,要把這些資源配置好是一件麻煩事,比如像數(shù)據(jù)庫(kù)連接這樣的資源是典型的例子.
把通用的資源配置代碼放在測(cè)試?yán)锟赡懿皇且粋(gè)好主意,
TestCase通過(guò)setUp 和tearDown方法來(lái)創(chuàng)建和銷毀fixture.TestCase會(huì)在運(yùn)行前調(diào)用setUp,并在每個(gè)測(cè)試完成后調(diào)用tearDown
把不止一個(gè)測(cè)試方法放入同一個(gè)TestCase的好處是可以共享Fixture代碼.
Junit通過(guò)Assert接口提供的工具方法來(lái)復(fù)用代碼.
2.6.2 創(chuàng)建單元測(cè)試方法
使用Fixture是復(fù)用代碼的好方法,但是還有很多常見(jiàn)的測(cè)試任務(wù),很多測(cè)試都會(huì)重復(fù)執(zhí)行這些任務(wù),Junit框架用一組assert方法封裝了
常見(jiàn)的測(cè)試任務(wù).這些assert方法可以極大的簡(jiǎn)化單元測(cè)試的編寫.
Assert超類型
TestCase成員
除了Assert提供的方法之外,TestCase還實(shí)現(xiàn)了10個(gè)它自己的方法,
保持測(cè)試的獨(dú)立性
你在開(kāi)始編寫自己的測(cè)試的時(shí)候,記住第一條規(guī)則:每個(gè)單元測(cè)試都必須獨(dú)立于其他單元測(cè)試而運(yùn)行.單元測(cè)試必須能以任何順序來(lái)進(jìn)行,一項(xiàng)測(cè)試不能依賴與前面的測(cè)試造成的改變,下面是會(huì)相互依賴的測(cè)試所造成的問(wèn)題:
不具可移植性
難以維護(hù)
不夠清晰

2.7創(chuàng)建TestCaculator的全過(guò)程


2.7.1創(chuàng)建TestSuite
                TestRunner一開(kāi)始尋找TestCaculate類中的suite方法.若找到了直接調(diào)用它,這個(gè)suite方法會(huì)創(chuàng)建不同的
TestCase類,并把他們加入到不同的TestSuite.
                因?yàn)門estCaculate沒(méi)有suite方法,所以TestRunner創(chuàng)建了一個(gè)默認(rèn)的TestSuite對(duì)象.

2.7.2 創(chuàng)建TestResult


步驟如下:
1. 在圖中1處,TestRunner實(shí)例化了一個(gè)TestResult對(duì)象,在測(cè)試順序執(zhí)行的時(shí)候,這個(gè)對(duì)象將用來(lái)存放測(cè)試結(jié)果;
2. TestRunner像TestResult注冊(cè)測(cè)試,這樣在執(zhí)行測(cè)試的過(guò)程中TestRunner可以收到各種事件,這是Observe模式的典型例子,TestResult會(huì)廣播如下方法:
測(cè)試開(kāi)始(startTest);
測(cè)試失敗(addFailure);
測(cè)試拋出未被預(yù)期的異常(addErr);
         測(cè)試結(jié)束(endTest);

3. 知道了這些事件,TestRunner可以隨著測(cè)試的進(jìn)行而顯示進(jìn)度條,并且在測(cè)試失敗和錯(cuò)誤的時(shí)候顯示出來(lái).
4. TestRunner通過(guò)調(diào)用TestSuite的run方法開(kāi)始測(cè)試.
5. Testsuite為它擁有的每個(gè)TestCase實(shí)例調(diào)用Run(TestResult)方法.
6. TestCase通過(guò)傳遞給它的TestTesult實(shí)例來(lái)運(yùn)行run(Test)方法,并把自身作為參數(shù)傳遞給Run方法,這樣TestResult梢后用runBare回調(diào)它
2.7.3 執(zhí)行測(cè)試方法

圖2.10描繪了執(zhí)行單個(gè)測(cè)試方法的步驟.步驟如下:
1. 在圖中5處,runBare方法順序執(zhí)行setup,testAdd,和tearDown方法.
2. 如果在執(zhí)行這3個(gè)方法的過(guò)程中發(fā)生了任何失敗和錯(cuò)誤,那么TestResult會(huì)分別調(diào)用addFailure和addError
來(lái)通知所有的Listener
3. 如果發(fā)生任何錯(cuò)誤,那么TestRunner會(huì)列出這些錯(cuò)誤,否則進(jìn)度條是綠色的,從而讓你知道沒(méi)有問(wèn)題.
4. 當(dāng)tearDown執(zhí)行完成后,整個(gè)測(cè)試過(guò)程完成了,Testresult會(huì)調(diào)用endTest把這個(gè)結(jié)果通知給所有的listener.
2.7.4 復(fù)習(xí)完整的Junit生命周期

第三章:Junit實(shí)例
Tests are the programmer’s stone, transmuting fear into boredom.
測(cè)試是程序員之石,把恐懼變成厭倦;
3.1 引入Controller組件
3.1.1設(shè)計(jì)接口
public interface Request {
      String getName();
}
public interface Response {
    
}
public interface RequestHandler {
      public Response process(Request request) throws Exception;
}
public interface Controller {
      Response processRequest(Request request);
      void addHandler(Request request,RequestHandler handler);
}

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