天天看點

《JUnit實戰(第2版)》—第2章2.1節探索JUnit核心

本節書摘來自異步社群《junit實戰(第2版)》一書中的第2章2.1節探索junit核心,作者【美】petar tahchiev , felipe leme , vincent massol , gary gregory,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

第2章 探索junit的核心

junit實戰(第2版)

mistakes are the portals of discovery.

錯誤是發現之門。

—james joyce

本章重點

使用核心junit類

了解junit的機制

了解junit的生命周期

在第1章中,我們已經明确了我們需要一種可靠的、可複用的方法來測試我們的程式。我們的解決方案就是編寫或複用一個架構來驅動測試代碼,以測試程式的api。因為我們的程式對現有的類增加了新的類、新的方法,是以我們也需要增加相應的測試代碼。經驗告訴我們,有時候類會以意想不到的方式互相作用,是以我們很有必要確定我們能夠在任何時間運作所有的測試,無論代碼發生了什麼修改。現在的問題是,我們如何才能運作多個測試類?并且我們如何才能搞清楚哪些測試通過了,而哪些測試失敗了?

在這一章中,我們将深入讨論junit是如何提供各種功能來解決以上這些問題的。我們首先介紹了junit的核心概念—測試類、測試集和測試運作器(test runner),然後我們進一步介紹了各種核心測試運作器和測試集,随後再來看一下我們的老朋友測試類,最後我們将觀察這些核心類是如何共同工作的。

而在下一章中,我們将使用一個應用程式示例來展示如何使用這些junit的核心概念。而且,我們還闡述了編寫群組織測試代碼的最佳做法。

2.1 探索junit核心

第1章中的calculatortest程式,如代碼2.1所示,定義了一個測試類,它包含了一個單獨的測試方法testadd。

定義一個測試類的要求是,這個類必須是公共的并且包含了一個無參數的構造函數。在我們的示例中,因為我們沒有定義任何其他構造函數,是以我們也不需要定義無參數的構造函數;java會為我們隐式地建立它。

建立一個測試方法的要求是,這個方法必須使用@test注釋,是公共的,不帶任何參數,并且傳回void類型。

《JUnit實戰(第2版)》—第2章2.1節探索JUnit核心

junit在調用(執行)每個@test方法之前,為測試類建立一個新的執行個體。這有助于提供測試方法之間的獨立性,并且避免在測試代碼中産生意外的副作用。因為每個測試方法都運作于一個新的測試類執行個體上,是以我們就不能在測試方法之間重用各個執行個體變量值。

為了進行測試驗證,我們使用了由junit的assert類提供的assert方法。正如你在之前的示例中所看到的那樣,我們在測試類中靜态地導入這些方法。另外,根據我們對靜态導入的喜好,我們還可以導入junit的assert類本身。表2.1列出了一些最流行的assert方法。

《JUnit實戰(第2版)》—第2章2.1節探索JUnit核心

當你需要一次運作多個測試類時,你就要建立另一個叫做測試集(test suite或suite)的對象。你的測試集也是一個特定的測試運作器(或者runner),是以可以像運作測試類那樣運作它。一旦你了解了測試類、suite與runner是如何工作的,你就可以編寫你所需要的任何測試了。這3個對象形成了junit架構的核心。

在日常工作中,你隻需要編寫測試類與測試集,其他類會在幕後幫你完成測試。

definition 測試類

(test class或testcase或test case)—一個包含一個或者多個測試的類,而這些測試就是指那些用@test注釋的方法。使用一個測試類,可以把具有公共行為的測試歸入一組。在本書的後續部分中,如果我們提到測試的時候,我們指的是一個用@test注釋的方法;如果我們提到一個測試用例(或測試類),我們指的是一個包含了這些測試方法的類,也就是一組測試。通常在生産類和測試類之間都存在着一對一的對應關系。

測試集(suite或者test suite)—一組測試。測試集是一種把多個相關測試歸入一組的便捷方式。比如,如果你沒有為測試類定義一個測試集,那麼junit會自動提供一個測試集,包含測試類中所有的測試(在後面的章節中會詳細介紹)。一個測試集通常會将同一個包中的測試類歸入一個組。

測試運作器(runner或test runner)—執行測試集的程式。junit提供了多種運作器來執行你的測試。本章随後會介紹這些運作器,并且教你如何編寫自己的測試運作器。

讓我們來看一看junit核心對象的具體職責,如表2.2所示。

表2.2 junit核心對象

《JUnit實戰(第2版)》—第2章2.1節探索JUnit核心

接下來,我們要詳細說明一下表2.2中列出的但我們此前還沒有見到過的對象:測試運作器runner與測試集suite對象。

要運作一個基礎的測試類,你不需要做什麼特别的工作;junit會代替你使用一個測試運作器(test runner)來管理你的測試類的生命周期,包括建立類、調用測試以及搜集結果。後面的章節将會涉及一些情況,要求你建立的測試能以一種特殊的方式運作。其中的一種情況可以緩解建立測試時經常碰到的一個問題:調用輸入不同的測試。在介紹junit提供的其他測試運作器之前,我們先在下一節中通過執行個體來讨論這個特殊情況。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。