[轉]在Eclipse中使用JUnit4進行單元測試(中級篇)

來源:互聯網
上載者:User

標籤:style   http   color   io   使用   ar   strong   for   sp   

我們繼續對初級篇中的例子進行分析。初級篇中我們使用Eclipse自動產生了一個測試架構,在這篇文章中,我們來仔細分析一下這個測試架構中的每一個細節,知其然更要知其所以然,才能更加熟練地應用JUnit4。

一、     包含必要地Package

在測試類別中用到了JUnit4架構,自然要把相應地Package包含進來。最主要地一個Package就是org.junit.*。把它包含進來之後,絕大部分功能就有了。還有一句話也非常地重要“import static org.junit.Assert.*;”,我們在測試的時候使用的一系列assertEquals方法就來自這個包。

大家注意一下,這是一個靜態包含(static),是JDK5中新增添的一個功能。也就 是說,assertEquals是Assert類中的一系列的靜態方法,一般的使用方式是Assert. assertEquals(),但是使用了靜態包含後,前面的類名就可以省略了,使用起來更加的方便。


二、     測試類別的聲明

大家注意到,我們的測試類別是一個獨立的類,沒有任何父類。測試類別的名字也可以任意命名,沒有任何局限性。所以我們不能通過類的聲明來判斷它是不是一個測試類別,它與普通類的區別在於它內部的方法的聲明,我們接著會講到。


三、     建立一個待測試的對象。

你要測試哪個類,那麼你首先就要建立一個該類的對象。正如上一篇文章中的代碼:

private static Calculator calculator = new Calculator();

 

為了測試Calculator類,我們必須建立一個calculator對象。


四、     測試方法的聲明

在測試類別中,並不是每一個方法都是用於測試的,你必須使用“標註”來明確表明哪些是測試方法。“標註”也是JDK5的一個新特性,用在此處非常恰當。我們可以看到,在某些方法的前有@Before、@Test、@Ignore等字樣,這些就是標註,以一個“@”作為開頭。這些標註都是JUnit4自訂的,熟練掌握這些標註的含義非常重要。


五、     編寫一個簡單的測試方法。

首先,你要在方法的前面使用@Test標註,以表明這是一個測試方法。對於方法的聲明也有如下要求:名字可以隨便取,沒有任何限制,但是傳回值必須為void,而且不能有任何參數。如果違反這些規定,會在運行時拋出一個異常。至於方法內該寫些什麼,那就要看你需要測試些什麼了。比如:


    @Test

    public void testAdd() {

          calculator.add(2);

          calculator.add(3);

          assertEquals(5, calculator.getResult());

    }

我們想測試一下“加法”功能時候正確,就在測試方法中調用幾次add函數,初始值為0,先加2,再加3,我們期待的結果應該是5。如果最終實際結果也是5,則說明add方法是正確的,反之說明它是錯的。assertEquals(5, calculator.getResult());就是來判斷期待結果和實際結果是否相等,第一個參數填寫期待結果,第二個參數填寫實際結果,也就是通過計算得到的結果。這樣寫好之後,JUnit會自動進行測試並把測試結果反饋給使用者。


六、     忽略測試某些尚未完成的方法。

如果你在寫程式前做了很好的規劃,那麼哪些方法是什麼功能都應該實現定下來。因此,即使該方法尚未完成,他的具體功能也是確定的,這也就意味著你可以為他編寫測試案例。但是,如果你已經把該方法的測試案例寫完,但該方法尚未完成,那麼測試的時候一定是“失敗”。這種失敗和真正的失敗是有區別的,因此JUnit提供了一種方法來區別他們,那就是在這種測試函數的前面加上@Ignore標註,這個標註的含義就是“某些方法尚未完成,暫不參與此次測試”。這樣的話測試結果就會提示你有幾個測試被忽略,而不是失敗。一旦你完成了相應函數,只需要把@Ignore標註刪去,就可以進行正常的測試。


七、     Fixture(暫且翻譯為“固定程式碼片段”)

Fixture的含義就是“在某些階段必然被調用的代碼”。比如我們上面的測試,由於只聲明了一個Calculator對象,他的初始值是0,但是測試完加法操作後,他的值就不是0了;接下來測試減法操作,就必然要考慮上次加法操作的結果。這絕對是一個很糟糕的設計!我們非常希望每一個測試都是獨立的,相互之間沒有任何耦合度。因此,我們就很有必要在執行每一個測試之前,對Calculator對象進行一個“複原”操作,以消除其他測試造成的影響。因此,“在任何一個測試執行之前必須執行的代碼”就是一個Fixture,我們用@Before來標註它,如前面例子所示:

      @Before

      public void setUp() throws Exception {

           calculator.clear();

      }

這裡不在需要@Test標註,因為這不是一個test,而是一個Fixture。同理,如果“在任何測試執行之後需要進行的收尾工作”也是一個Fixture,使用@After來標註。由於本例比較簡單,沒有用到此功能。


        JUnit4的一些基本知識就介紹到此,還有一些更靈活的用法放在本系列的進階篇中給大家介紹!

[轉]在Eclipse中使用JUnit4進行單元測試(中級篇)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.