您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
Java標(biāo)準(zhǔn)單元測(cè)試庫(kù)JUnit4
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/7 13:27:12 ] 推薦標(biāo)簽:

  
  這種方法使得測(cè)試受保護(hù)的方法非常容易,因?yàn)闇y(cè)試案例類現(xiàn)在可以擴(kuò)展包含受保護(hù)方法的類了。
  
  SetUp 和 TearDown
  
  JUnit 3 測(cè)試運(yùn)行程序(test runner)會(huì)在運(yùn)行每個(gè)測(cè)試之前自動(dòng)調(diào)用 setUp() 方法。該方法一般會(huì)初始化字段,打開(kāi)日志記錄,重置環(huán)境變量,等等。例如,下面是摘自 XOM 的 XSLTransformTest 中的 setUp() 方法:
  

  protected void setUp() {      System.setErr(new PrintStream(new ByteArrayOutputStream()));      inputDir = new File("data");   inputDir = new File(inputDir, "xslt");   inputDir = new File(inputDir, "input");      }

  
  

在 JUnit 4 中,您仍然可以在每個(gè)測(cè)試方法運(yùn)行之前初始化字段和配置環(huán)境。然而,完成這些操作的方法不再需要叫做 setUp(),只要用 @Before 注釋來(lái)指示即可,如下所示:
  

  @Before protected void initialize() {      System.setErr(new PrintStream(new ByteArrayOutputStream()));      inputDir = new File("data");   inputDir = new File(inputDir, "xslt");   inputDir = new File(inputDir, "input");      }


  
  甚至可以用 @Before 來(lái)注釋多個(gè)方法,這些方法都在每個(gè)測(cè)試之前運(yùn)行:
  

  @Before protected void findTestDataDirectory() {   inputDir = new File("data");   inputDir = new File(inputDir, "xslt");   inputDir = new File(inputDir, "input");   }      @Before protected void redirectStderr() {   System.setErr(new PrintStream(new ByteArrayOutputStream()));   }


  
  清除方法與此類似。在 JUnit 3 中,您使用 tearDown() 方法,該方法類似于我在 XOM 中為消耗大量?jī)?nèi)存的測(cè)試所使用的方法:
  

  protected void tearDown() {   doc = null;   System.gc();   }


  
  對(duì)于 JUnit 4,我可以給它取一個(gè)更自然的名稱,并用 @After 注釋它:
  

  @After protected void disposeDocument() {   doc = null;   System.gc();   }


  
  與 @Before 一樣,也可以用 @After 來(lái)注釋多個(gè)清除方法,這些方法都在每個(gè)測(cè)試之后運(yùn)行。
  
  后,您不再需要在超類中顯式調(diào)用初始化和清除方法,只要它們不被覆蓋即可,測(cè)試運(yùn)行程序?qū)⒏鶕?jù)需要自動(dòng)為您調(diào)用這些方法。超類中的 @Before 方法在子類中的 @Before 方法之前被調(diào)用(這反映了構(gòu)造函數(shù)調(diào)用的順序)。@After 方法以反方向運(yùn)行:子類中的方法在超類中的方法之前被調(diào)用。否則,多個(gè) @Before 或 @After 方法的相對(duì)順序得不到保證。
  
  套件范圍的初始化
  
  JUnit 4 也引入了一個(gè) JUnit 3 中沒(méi)有的新特性:類范圍的 setUp() 和 tearDown() 方法。任何用 @BeforeClass 注釋的方法都將在該類中的測(cè)試方法運(yùn)行之前剛好運(yùn)行一次,而任何用 @AfterClass 注釋的方法都將在該類中的所有測(cè)試都運(yùn)行之后剛好運(yùn)行一次。
  
  例如,假設(shè)類中的每個(gè)測(cè)試都使用一個(gè)數(shù)據(jù)庫(kù)連接、一個(gè)網(wǎng)絡(luò)連接、一個(gè)非常大的數(shù)據(jù)結(jié)構(gòu),或者還有一些對(duì)于初始化和事情安排來(lái)說(shuō)比較昂貴的其他資源。不要在每個(gè)測(cè)試之前都重新創(chuàng)建它,您可以創(chuàng)建它一次,并還原它一次。該方法將使得有些測(cè)試案例運(yùn)行起來(lái)快得多。例如,當(dāng)我測(cè)試調(diào)用第三方庫(kù)的代碼中的錯(cuò)誤處理時(shí),我通常喜歡在測(cè)試開(kāi)始之前重定向 System.err,以便輸出不被預(yù)期的錯(cuò)誤消息打亂。然后我在測(cè)試結(jié)束后還原它,如下所示:
  
  // This class tests a lot of error conditions, which
  // Xalan annoyingly logs to System.err. This hides System.err
  // before each test and rest

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