- JUnit 教程
- JUnit - 首頁
- JUnit - 概述
- JUnit - 環境設定
- JUnit - 測試框架
- JUnit - 基本用法
- JUnit - API
- JUnit - 編寫測試
- JUnit - 使用斷言
- JUnit - 執行流程
- JUnit - 執行測試
- JUnit - 套件測試
- JUnit - 忽略測試
- JUnit - 時間測試
- JUnit - 異常測試
- JUnit - 引數化測試
- JUnit - 與 Ant 整合
- JUnit - 與 Eclipse 整合
- JUnit - 擴充套件
- JUnit 有用資源
- JUnit - 問題與解答
- JUnit - 快速指南
- JUnit - 有用資源
- JUnit - 討論
JUnit - 面試問題
親愛的讀者,這些JUnit 面試問題專為幫助您熟悉在JUnit主題面試中可能遇到的問題型別而設計。根據我的經驗,優秀的面試官在面試過程中很少會計劃提出特定的問題,通常問題會從主題的一些基本概念開始,然後根據進一步的討論以及您的回答繼續進行。
測試是檢查應用程式功能的過程,以確保其是否按要求工作。
單元測試是對單個實體(類或方法)的測試。單元測試對於每個軟體公司來說都至關重要,以便向客戶提供高質量的產品。
在沒有任何工具支援的情況下手動執行測試用例稱為手動測試。
藉助工具支援並使用自動化工具執行測試用例稱為自動化測試。
以下是手動測試的缺點:
耗時且乏味 - 由於測試用例由人力資源執行,因此速度非常慢且乏味。
人力資源投入巨大 - 由於需要手動執行測試用例,因此手動測試需要更多的測試人員。
可靠性低 - 手動測試的可靠性較低,因為由於人為錯誤,每次測試的執行精度可能不一致。
不可程式設計 - 無法進行程式設計以編寫複雜的測試來獲取隱藏的資訊。
以下是自動化測試的優點:
快速 - 自動化執行測試用例的速度比人力資源快得多。
人力資源投入減少 - 測試用例透過使用自動化工具執行,因此自動化測試需要的測試人員較少。
更可靠 - 自動化測試每次執行時都執行相同的操作。
可程式設計 - 測試人員可以編寫複雜的測試來提取隱藏的資訊。
JUnit 是一個迴歸測試框架,開發人員使用它在 Java 中實現單元測試,從而加快程式設計速度並提高程式碼質量。
以下是 JUnit 的重要特性:
這是一個開源框架。
提供註解來識別測試方法。
提供斷言來測試預期結果。
提供測試執行器來執行測試。
JUnit 測試可以自動執行,它們檢查自己的結果並提供即時反饋。
JUnit 測試可以組織成包含測試用例甚至其他測試套件的測試套件。
JUnit 在一個進度條中顯示測試進度,如果測試正常進行,則為綠色,如果測試失敗,則變為紅色。
單元測試用例是程式碼的一部分,它確保程式碼的另一部分(方法)按預期工作。為了快速實現這些期望的結果,需要測試框架。JUnit 是 Java 程式語言的完美單元測試框架。
正式編寫的單元測試用例的特徵是已知的輸入和預期的輸出,這些輸出在測試執行之前就已經確定。已知的輸入應該測試先決條件,而預期的輸出應該測試後置條件。
每個需求至少必須有兩個單元測試用例:一個正向測試和一個負向測試。如果一個需求有子需求,則每個子需求至少必須有兩個測試用例作為正向和負向。
在開發過程中,在程式碼編寫之前編寫測試,以幫助編碼人員編寫最佳程式碼。
使用 system.out.println() 除錯程式碼會導致每次程式執行時都手動掃描整個輸出,以確保程式碼正在執行預期的操作。此外,從長遠來看,編寫 JUnit 方法並在類檔案上對其進行測試所需的時間更少。
請按照以下步驟操作:
下載最新版本的 JUnit,以下簡稱 junit.zip。
將 junit.zip 分發檔案解壓縮到一個名為 %JUNIT_HOME% 的目錄中。
將 JUnit 新增到類路徑中:
set CLASSPATH=%CLASSPATH%;%JUNIT_HOME%\junit.jar
透過執行與 JUnit 一起分發的示例測試來測試安裝(示例測試直接位於安裝目錄中,而不是 junit.jar 檔案中)。然後只需鍵入:
java org.junit.runner.JUnitCore org.junit.tests.AllTests
所有測試都應該透過並顯示“OK”訊息。如果測試沒有透過,請驗證 junit.jar 是否在 CLASSPATH 中。
在單個測試中報告多個失敗通常表示測試做得太多,並且單元測試規模過大。JUnit 旨在與大量小型測試配合使用。它在測試類的單獨例項中執行每個測試。它報告每個測試的失敗。
JUnit 3.7 已棄用 assert() 並將其替換為 assertTrue(),其工作方式完全相同。JUnit 4 與 assert 關鍵字相容。如果您使用 -ea JVM 開關執行,則 JUnit 將報告失敗的斷言。
重構 J2EE 元件以將功能委託給不必在 J2EE 容器中執行的其他物件將改善軟體的設計和可測試性。Cactus 是一個開源 JUnit 擴充套件,可用於單元測試伺服器端 Java 程式碼。
JUnit 框架可以輕鬆地與以下任何一種整合:
- Eclipse
- Ant
- Maven
JUnit 測試框架提供以下重要特性:
- 夾具
- 測試套件
- 測試執行器
- JUnit 類
夾具是一組物件的固定狀態,用作執行測試的基線。測試夾具的目的是確保有一個眾所周知且固定的環境來執行測試,以便結果可重複。它包括以下方法:
setUp() 方法,在每次測試呼叫之前執行。
tearDown() 方法,在每次測試方法之後執行。
測試套件表示捆綁一些單元測試用例並一起執行它們。在 JUnit 中,@RunWith 和 @Suite 註解都用於執行套件測試。
測試執行器用於執行測試用例。
JUnit 類是在編寫和測試 JUnit 中使用的重要類。一些重要的類是:
Assert - 它包含一組斷言方法。
TestCase - 它包含一個測試用例,定義了執行多個測試的夾具。
TestResult - 它包含收集執行測試用例結果的方法。
TestSuite - 它是測試的組合。
註解就像元標記,您可以將其新增到程式碼中並將其應用於方法或類。JUnit 中的註解為我們提供了有關測試方法的資訊,哪些方法將在測試方法之前和之後執行,哪些方法將在所有方法之前和之後執行,哪些方法或類在執行期間將被忽略。
請按照以下步驟操作:
設定 CLASSPATH
呼叫執行器:
java org.junit.runner.JUnitCore
此類提供了一組用於編寫測試的有用斷言方法。僅記錄失敗的斷言。
TestResult 收集執行測試用例的結果。它是收集引數模式的一個例項。測試框架區分失敗和錯誤。失敗是預期的並透過斷言進行檢查。錯誤是意外的問題,例如 ArrayIndexOutOfBoundsException。
TestSuite 是測試的組合。它執行一系列測試用例。
Test 註解告訴 JUnit 附加到其上的 public void 方法可以作為測試用例執行。
一些測試在執行之前需要建立類似的物件。使用 `@Before` 註解一個公共的 `void` 方法會導致該方法在每個測試方法之前執行。
如果在 `Before` 方法中分配了外部資源,則需要在測試執行後釋放它們。使用 `@After` 註解一個公共的 `void` 方法會導致該方法在測試方法之後執行。
使用 `@BeforeClass` 註解一個公共的靜態 `void` 方法會導致它在類中任何測試方法之前只執行一次。
這將在所有測試完成後執行該方法。這可以用於執行清理活動。
以下是 `@Ignore` 註解的一些用途:
您可以在原始碼中輕鬆識別所有 `@Ignore` 註解,而未加註解或已註釋掉的測試則不容易找到。
在某些情況下,您可能無法修復失敗的程式碼,但您仍然希望該方法存在,正是為了防止它被遺忘。在這種情況下,`@Ignore` 很有意義。
以下是 JUnit 執行過程的工作原理:
首先,使用 `@BeforeClass` 註解的方法只執行一次。
最後,使用 `@AfterClass` 註解的方法只執行一次。
使用 `@Before` 註解的方法為每個測試用例執行,但在執行測試用例之前。
使用 `@After` 註解的方法為每個測試用例執行,但在測試用例執行之後。
在使用 `@Before` 註解的方法和使用 `@After` 註解的方法之間,每個測試用例都會執行。
測試用例使用 JUnitCore 類執行。JUnitCore 是用於執行測試的 Facade。它支援執行 JUnit 4 測試、JUnit 3.8.x 測試以及混合測試。
Junit 提供了一個方便的 Timeout 選項。如果測試用例花費的時間超過指定的毫秒數,則 Junit 會自動將其標記為失敗。timeout 引數與 `@Test` 註解一起使用。
JUnit 提供了一個跟蹤程式碼異常處理的選項。您可以測試程式碼是否丟擲了期望的異常。expected 引數與 `@Test` 註解一起使用,如下所示:`@Test(expected)`
Junit 4 引入了一項新功能:引數化測試。引數化測試允許開發人員使用不同的值反覆執行相同的測試。
建立引數化測試需要遵循五個步驟:
使用 `@RunWith(Parameterized.class)` 註解測試類。
建立一個使用 `@Parameters` 註解的公共靜態方法,該方法返回一個物件集合(作為陣列),作為測試資料集。
建立一個公共建構函式,它接收相當於測試資料的一“行”。
為測試資料的每一“列”建立一個例項變數。
使用例項變數作為測試資料來源建立測試用例。
每個資料行都會呼叫一次測試用例。讓我們看看引數化測試的實際應用。
夾具是一組物件的固定狀態,用作執行測試的基線。測試夾具的目的是確保有一個眾所周知且固定的環境來執行測試,以便結果可重複。它包括:
setUp() 方法,在每次測試呼叫之前執行。
tearDown() 方法,在每次測試方法之後執行。
編譯 JUnit 測試類就像編譯任何其他 Java 類一樣。您需要注意的唯一一點是,JUnit JAR 檔案必須包含在類路徑中。
如果 JUnit 測試方法宣告為“private”,則它會成功編譯。但執行將失敗。這是因為 JUnit 要求所有測試方法都必須宣告為“public”。
當方法宣告為“protected”時,只能在定義類的同一個包中訪問它。因此,要測試目標類的“protected”方法,請在與目標類相同的包中定義您的測試類。
當方法宣告為“private”時,只能在同一個類中訪問它。因此,無法從任何測試類測試目標類的“private”方法。因此,您需要手動執行單元測試。或者您必須將方法從“private”更改為“protected”。
如果 JUnit 測試方法宣告為返回“String”,則編譯將透過。但執行將失敗。這是因為 JUnit 要求所有測試方法都必須宣告為返回“void”。
是的,您可以使用 main() 方法進行測試。一個明顯的優勢似乎是您可以白盒測試該類。也就是說,您可以測試它的內部(例如私有方法)。您無法使用單元測試來做到這一點。但主要的是,測試框架從使用者的角度測試介面和行為。
不。我們不需要為每個需要測試的類編寫一個獨立的測試類。如果有一小組測試共享一個公共的測試夾具,您可以將這些測試移動到一個新的測試類中。
測試執行程式在測試執行期間會對所有 Test 例項保持強引用。這意味著對於具有許多 Test 例項的非常長的測試執行,在整個測試執行結束之前,可能沒有任何測試會被垃圾回收。例如,在 tearDown() 方法中將物件顯式設定為 null,允許它在整個測試執行結束之前被垃圾回收。
在單元測試中,模擬物件可以模擬複雜、真實(非模擬)物件的行為,因此當在單元測試中包含真實物件不切實際或不可能時,它們非常有用。
使用模擬物件進行測試的常用編碼風格是:
- 建立模擬物件的例項。
- 在模擬物件中設定狀態和期望。
- 使用模擬物件作為引數呼叫領域程式碼。
- 驗證模擬物件的一致性。
以下是 JUnit 擴充套件:
Cactus
JWebUnit
XMLUnit
MockObject
Cactus 是一個簡單的測試框架,用於單元測試伺服器端 Java 程式碼(Servlet、EJB、標籤庫、過濾器)。Cactus 的目的是降低編寫伺服器端程式碼測試的成本。它使用 JUnit 並對其進行擴充套件。Cactus 實現了容器內策略,這意味著測試在容器內執行。
Cactus 生態系統由幾個元件組成:
Cactus 框架是 Cactus 的核心。它是提供編寫 Cactus 測試的 API 的引擎。
Cactus 整合模組是前端和框架,它們提供了使用 Cactus 框架的簡便方法(Ant 指令碼、Eclipse 外掛、Maven 外掛)。
WebUnit 是一個基於 Java 的 Web 應用程式測試框架。它使用統一、簡單的測試介面包裝現有的測試框架(如 HtmlUnit 和 Selenium),允許您快速測試 Web 應用程式的正確性。
JWebUnit 提供了一個高階 Java API,用於瀏覽 Web 應用程式,並結合了一組斷言來驗證應用程式的正確性。這包括透過連結導航、表單輸入和提交、表內容驗證以及其他典型的業務 Web 應用程式功能。
簡單的導航方法和現成的斷言允許比僅使用 JUnit 或 HtmlUnit 更快速地建立測試。如果您想從 HtmlUnit 切換到其他外掛(如 Selenium(即將推出)),則無需重寫您的測試。
XMLUnit 提供了一個單獨的 JUnit 擴充套件類 XMLTestCase 和一組支援類。
支援類允許對以下內容進行斷言:
兩段 XML 之間的差異(透過 Diff 和 DetailedDiff 類)。
XML 片段的有效性(透過 Validator 類)。
使用 XSLT 轉換 XML 片段的結果(透過 Transform 類)。
在 XML 片段上評估 XPath 表示式(透過實現 XpathEngine 介面的類)。
DOM 遍歷公開的 XML 片段中的單個節點(透過 NodeTest 類)。
接下來是什麼?
此外,您可以回顧一下您之前完成的與該主題相關的作業,並確保您可以自信地談論它們。如果您是應屆畢業生,面試官並不期望您能回答非常複雜的問題,而是您必須使自己的基礎概念非常牢固。
其次,如果您無法回答一些問題,這並不重要,重要的是您回答的任何問題都必須充滿信心。所以在面試時要自信。我們在 tutorialspoint 祝您面試順利,並祝您未來一切順利。乾杯 :-)