單元測試是軟件開發流程中的重要環節,在軟件工程理論里,越早發現bug,修復的成本越低。單元測試就屬於測試人員/開發人員提前介入測試的一種手段,在代碼還沒正式提測前,提前對函數、類進行測試。但是很多時候往往因為項目周期比較緊張,從而忽略了單元測試,這樣很多bug可能要到提測後,甚至就一直隱藏在代碼中無法被發現。這就相當於在代碼中埋藏了定時炸彈。因此單元測試是十分有必要的,它是保障代碼執行的重要手段。
在Java領域裡,最知名的單元測試框架就是Junit了。 JUnit 有着較長的發展歷史和不斷演進的豐富功能,備受大多數 Java 開發者的青睞。
最新的Junit版本是Junit5,這個版本可以說是 JUnit 單元測試框架的一次重大升級,首先需要 Java 8 以上的運行環境,雖然在舊版本 JDK 也能編譯運行,但要完全使用 JUnit 5 功能, JDK 8 環境是必不可少的。
Junit5的主要特性有:
1. 提供全新的斷言和測試註解,支持測試類內嵌
2. 更豐富的測試方式:支持動態測試,重複測試,參數化測試等
3. 實現了模塊化,讓測試執行和測試發現等不同模塊解耦,減少依賴
4. 提供對 Java 8 的支持,如 Lambda 表達式,Sream API等
接下來,我們來學習下Junit的一些基本使用。
在工程中引入Junit依賴
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
先寫一個簡單的測試類
@DisplayName("第1個測試類")public class DemoTest {
@BeforeAll
public static void init() {
System.out.println("初始化數據");
}
@AfterAll
public static void end() {
System.out.println("清理數據");
}
@BeforeEach
public void setup() {
System.out.println("當前測試方法開始");
}
@AfterEach
public void tearDown() {
System.out.println("當前測試方法結束");
}
@DisplayName("第1個測試")
@Test
void test1() {
System.out.println("第1個測試開始測試");
}
@DisplayName("第2個測試")
@Test
void test2() {
System.out.println("第2個測試開始測試");
}}幾個常用的註解解釋:
@DisplayName:測試類在測試報告中的名稱,可以加在類上,也可以加在方法上
@BeforeAll和@AfterAll:它們定義了整個測試類在開始前以及結束時的操作,只能修飾靜態方法,主要用於在測試過程中所需要的全局數據和外部資源的初始化和清理
@BeforeEach和@AfterEach:它們所標註的方法會在每個測試用例方法開始前和結束時執行,主要是負責該測試用例所需要的運行環境的準備和銷毀。
在idea中運行測試類,看到控制台打印信息如下:
可以看到,在整個測試過程中,init函數和end函數只執行了一次,setup和tearDown函數在每次運行test1、test2函數前後分別執行。
重複性測試
在函數上添加@RepeatedTest註解可以指定重複執行的次數
@DisplayName("我的第三個測試-斷言")
@RepeatedTest(3)
void test3() {
System.out.println("我的第三個測試開始測試");
Assertions.assertEquals(1, 1);
}執行代碼,可以看到test3函數連續執行了3次
免費領取 碼同學軟件測試 課程筆記+超多學習資料+完整視頻+最新面試題,可以轉發文章 + 私信「碼同學666」獲取資料哦
斷言
在Junit5中,提供了新的斷言類Assertions,常見的api:
assertEquals:判斷兩個數據是否相等
assertNotEquals:判斷兩個數據是否不相等
assertNotNull:判斷對象是否為空
示例:
@DisplayName("第4個測試")
@Test
void test4() {
System.out.println("第4個測試開始測試");
Assertions.assertEquals(1, 2);
}執行測試,可以看到case執行失敗

參數化測試
在Junit5中,對參數化提供了非常豐富的支持,比如固定數組、csv文件等。
首先在項目中添加參數化依賴包
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
數組化參數
在測試函數上添加參數化相關的註解即可,如:
@DisplayName("第5個測試-參數化測試-數字")@ParameterizedTest
@ValueSource(ints = {1,2,3})
void test5(int num) {
System.out.println("當前數字為:" + num);
}註解解釋:
@ParameterizedTest:運行參數化測試
@ValueSource:參數來源為數組,支持各種基本數據類型的數組,如整型數組ints,字符串數組strings,chars等
按照上述配置,test5函數會運行3次,每次會把數組中的元素傳入num值

Junit支持將參數數據寫入到一個csv文件中,然後在測試用例中讀取csv文件中的數據。
在項目resource目錄下新建一個csv文件,內部保存用戶名和token的對應數據

@DisplayName("第8個測試-參數化測試-csv文件")
@ParameterizedTest
@CsvFileSource(resources = "/output.csv")
void test8(String name, String token) {
System.out.println("當前姓名為:" + name + ",當前token為:" + token);
}@CsvFileSource:指定csv文件的路徑
在函數名上定義csv文件中每列對應的參數名,這樣csv文件中有幾行數據,test8函數就會運行幾次,並且每次都會傳入對應列的數據。

以上就是Junit常用的一些使用場景,更多Junit的使用方法,可以去Junit官網查看相關的示例。
END
免費領取碼同學軟件測試課程筆記+超多學習資料+學習完整視頻,可以關注我們公眾號哦:自動化軟件測試
本文著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/226688.html
微信掃一掃
支付寶掃一掃