原創|使用教程|編輯:鄭恭琳|2020-12-11 13:23:44.743|閱讀 553 次
概述:今天,我們將返回簡短的(但并非少用的!)JUnit教程之一,它有關如何設置、編寫和運行JUnit測試的單元測試基礎知識。什么是JUnit,如何入門?
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
今天,我們將返回簡短的(但并非少用的!)JUnit教程之一,它有關如何設置、編寫和運行JUnit測試的單元測試基礎知識。什么是JUnit,如何入門?
理解基礎知識,并像本教程的專業版一樣擴展您的單元測試實踐。
但是在深入探討JUnits之前,讓我們先討論一下單元測試和回歸測試以及它們為什么如此重要。我們將繼續介紹一些很好的例子。
單元測試是白盒測試的一種形式,其中測試用例基于內部結構。測試人員選擇輸入以探索特定路徑,并確定適當的輸出。單元測試的目的是檢查單個組件或方法/類的片段以驗證功能,以確保行為符合預期。
“單元”的確切范圍通常留給解釋,但是一個很好的經驗法則是,一個單元包含最少量的執行獨立任務的代碼(例如,單個方法或類)。我們有一個很好的理由限制單元測試的范圍-如果我們構建的測試具有項目的多個方面,那么我們已經將重點從單一方法的功能轉移到了代碼不同部分之間的交互上。如果測試失敗,我們不知道為什么失敗,而我們卻想知道失敗的點是在我們感興趣的方法之內還是與該方法相關的依賴關系。
回歸測試
作為對單元測試,回歸測試的補充,通過測試對代碼所做的更改,可以確保最新的修復程序,增強功能或補丁程序不會破壞現有功能。更改代碼是不可避免的,無論是對現有代碼的修改,還是為新功能添加軟件包……您的代碼肯定會更改。正是這種變化才是最危險的,因此考慮到這一點,必須進行回歸測試。
JUnit是一個Java單元測試框架,是用于回歸測試的最佳測試方法之一。一個開源框架,用于編寫和運行可重復的自動化測試。
與其他任何東西一樣,JUnit測試框架也隨著時間的推移而發展。要注意的主要變化是JUnit 4發行版中引入了注釋,這增加了JUnits的組織性和可讀性。本文章的其余部分將根據Junit 4和5的用法編寫。
因此,讓我們開始吧。這是設置JUnit的步驟。
默認情況下,更常見的IDE(例如Eclipse和IntelliJ)已經安裝了JUnit測試集成。如果不使用IDE或僅依靠Maven或Gradle這樣的構建系統,則分別通過pom.xml或build.gradle處理Junit 4/5的安裝。重要的是要注意,Junit 5分為3個模塊,其中一個是老式模塊,支持Junit 4和3的注釋/語法(盡管坦率地說,使用Junit 3令人沮喪,通常僅在較老的項目中才能看到)。
JUnit 4
要將JUnit 4添加到您的Maven,請在pom.xml中構建以下內容。注意版本:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
對于Gradle,將以下內容添加到build.gradle中:
apply plugin: 'java' dependencies { testCompile 'junit:junit:4.12' }
JUnit 5
添加JUnit 5有點不同。由于JUnit 5采用模塊化方式,因此使用BOM來導入所有方面。如果僅需要特定的類,則可以指定單個組或工件。
要將JUnit 5添加到Maven,請將以下內容添加到pom.xml:
<dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.2.0</version> <scope>test</scope> </dependency>
對于Gradle,將以下內容添加到build.gradle中:
apply plugin: 'java' dependencies { implementation 'org.junit:junit-bom:5.2.0' }
如果您需要手動放置類路徑以進行JUnit測試,則Java需要原始jar文件,盡管通常不需要這樣做。Git包含JUnit的代碼。JUnit 4具有可直接下載的jar。Junit 5(我正在寫這篇文章)目前還沒有預制的jar文件,但是可以輕松地編譯代碼并生成jar。
現在我們已經討論了一些有關JUnit測試和設置的知識,讓我們繼續進行這些測試的實際構建和執行。為了最好地說明JUnit的創建,我們想從一些基本的東西開始。在下面的JUnit測試示例圖像中,我們有一個簡單的方法(左)將華氏溫度轉換為攝氏溫度,還有一個與我們的方法關聯的JUnit(右)。我已為我們的JUnit編號,并將在下面詳細討論這些部分。
第1節和第2節:
這些是利用測試框架所需的JUnit庫的導入。可以將導入的庫指定為JUnit的特定功能,但是通常將其與星號一起導入以訪問所有功能。
第3節:
這是我們測試類的開始,這里要注意的重要一點是該類的命名約定,它遵循ClassNameTest。
第4節:
在這里,我們看到了第一個特定于JUnit的語法,即注釋。創建JUnit時,注釋非常重要。這就是JUnit知道如何處理代碼的處理部分的方式。在我們的示例案例中,我們有一個@Test批注,它告訴JUnit它可以附加到其上的public void方法可以作為測試用例運行。
還有許多其他注釋,但更常見的是@Before(在@Test之前運行某些語句/前提,公共無效),@ After(在@Test之后運行某些語句,公共無效),例如重置變量,刪除臨時文件、變量,等等)和@Ignore(在測試執行過程中會忽略某些語句——請注意,@BeforeClass和@AfterClass分別用于在所有測試用例之前和之后運行語句,公共靜態無效)。
第5節:
這里的要點再次是命名約定。注意結構testMethodName。
第6節:
在這里,我們構造了類對象的新實例。這是必需的,因此我們可以調用正在測試的方法。沒有這個對象實例,我們將無法測試該方法。
第7節:
與該方法關聯的變量需要建立,因此在這里我們聲明與我們的方法相對應的變量。應該給它們賦予有意義的值(注意:如果參數是一個對象,則可以實例化或模擬它),以便我們的測試有意義。
第8節:
該變量聲明可以被認為是可選的,但是出于組織性和可讀性的考慮,這是值得的。我們將要測試的方法的結果分配給該變量,并根據需要使用它來進行斷言等。
第9節:
assert方法(屬于org.junit.Assert類的一部分)用于確定測試用例的通過/失敗狀態。僅記錄失敗的斷言。像注釋一樣,有許多斷言選項。在上面的示例JUnit中,我們使用assertEquals(expected,Actual,delta)。這將接受用戶定義的預期結果,實際值(即調用方法的結果)和增量值(允許實現預期值和實際值之間的偏差)。斷言的目的是驗證。盡管不需要運行JUnit,但是添加斷言無疑會破壞測試的目的。沒有斷言,您將沒有驗證,最多也不會進行冒煙測試,只有在測試錯誤出局時才能提供反饋。
選擇自己的冒險!在這里,我們將研究三種運行JUnit的方法:直接從命令行,從IDE(Eclipse和IntelliJ)以及使用構建系統(Maven和Gradle)。
如何從命令行運行JUnit
要直接從命令行運行JUnit,您需要做一些事情:路徑上的JDK,原始Junit jar文件以及測試用例。命令如下(此示例適用于Junit 4):
java -cp /path/to/junit.jar org.junit.runner.JUnitCore <test class name>
注意:在專業設置中,如果沒有某些構建系統,就不太可能從命令行手動運行測試,但是可以使用。
如何從IDE運行JUnit
Eclipse
要從Eclipse運行,請從Package Explorer中找到JUnit測試,無論您將其指定在哪個文件夾中。右鍵單擊,然后向下移動至“運行為JUnit測試”。這將執行測試并打開一個新的JUnit窗口(如果尚未打開)。
IntelliJ
在IntelliJ中運行測試與Eclipse非常相似。在“項目”窗口中,找到測試,右鍵單擊,然后選擇運行“testName”。像Eclipse一樣,將打開一個JUnit窗口,其中包含測試結果。
如何使用構建系統運行JUnit
Maven
Maven使運行測試變得簡單。確保從命令行將您放置在正確的位置,并且正確配置了項目pom.xml。然后,您可以運行以下命令來執行JUnit:
要運行整個測試套件:
mvn test
要運行單個/特定測試:
mvn -Dtest=TestName test
Gradle
像maven一樣,Gradle使運行測試變得簡單。
要運行整個測試套件:
gradlew test
要運行單個/特定測試:
gradlew -Dtest.single=testName test
注意:Maven和Gradle是他們自己的產物——此處顯示的內容很少涵蓋基礎知識。如果您想了解更多信息,請查閱他們的文檔。
我們的示例遍歷了非常簡單的代碼段,當然,這僅僅是單元測試的開始。更復雜的方法調用數據庫或其他方法,但是要保證功能性,我們需要隔離,這是通過模擬實現的。模擬可幫助我們隔離代碼單元,以集中精力進行驗證(通常用于模擬的框架為Mockito和PowerMock)。要了解有關模擬的更多信息,請閱讀另一篇文章:如何自動執行Java單元測試,包括模擬和斷言。
因此,如果單元測試是如此驚人,那么為什么每個人都不贊呢?好吧,單元測試并不容易實現。這需要大量的開發技能和時間,開發人員往往不太喜歡它,并且需要花時間和精力來維護測試套件。
但是單元測試的好處很明顯:
因此,部署強大的單元測試工具(如Parasoft Jtest)很有用,該工具可以解決與JUnits相關的許多問題,并節省開發人員寶貴的時間。Parasoft Jtest的單元測試助手費時費力地為用戶提供了使用直觀的一鍵式操作創建測試的指南,從而減少了JUnit測試的生成時間。通過自動建議來解決可維護性,這些建議可以識別不穩定的測試環境(和其他風險)、斷言建議等內容。
要了解有關如何減輕痛苦和提高單元測試的更多信息,請下載。它是免費的,易于設置,您可以按照此處的所有教程進行操作,以快速入門。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn