Java中單元測試框架JUnit知識點整理
JUnit 是 Java 中最常用的單元測試框架,用于編寫和運行可重復的測試。以下是 JUnit 的核心知識點整理:
1. JUnit 版本差異
- JUnit 4:基于注解(如
@Test、@Before),兼容 Java 5+ - JUnit 5(Jupiter):是 JUnit 的新一代版本,包含三個子項目:
- JUnit Platform:測試運行平臺
- JUnit Jupiter:新的編程模型和擴展模型
- JUnit Vintage:兼容 JUnit 4 和 3
2. 核心注解
JUnit 4 常用注解
@Test:標記測試方法@Before:每個測試方法執(zhí)行前運行@After:每個測試方法執(zhí)行后運行@BeforeClass:所有測試方法執(zhí)行前運行(靜態(tài)方法)@AfterClass:所有測試方法執(zhí)行后運行(靜態(tài)方法)@Ignore:忽略該測試方法
JUnit 5 新增注解
@Test:功能增強,無需聲明異常@BeforeEach:替代 JUnit 4 的@Before@AfterEach:替代 JUnit 4 的@After@BeforeAll:替代 JUnit 4 的@BeforeClass@AfterAll:替代 JUnit 4 的@AfterClass@Disabled:替代@Ignore@DisplayName:為測試類或方法設(shè)置可讀性名稱@Nested:標記嵌套測試類@Tag:為測試打標簽,用于篩選執(zhí)行@ParameterizedTest:參數(shù)化測試(需配合參數(shù)源注解)
3. 斷言(Assertions)
用于驗證測試結(jié)果是否符合預期。
JUnit 4
- 主要使用
org.junit.Assert類的靜態(tài)方法:assertEquals(expected, actual); // 相等判斷 assertTrue(condition); // 驗證為真 assertFalse(condition); // 驗證為假 assertNull(object); // 驗證為 null assertNotNull(object); // 驗證不為 null assertSame(expected, actual); // 驗證引用相同
JUnit 5
- 斷言位于
org.junit.jupiter.api.Assertions:- 功能類似,但支持 lambda 表達式延遲計算:
assertEquals(expected, actual, () -> "自定義錯誤消息");
- 新增
assertAll()支持批量斷言(所有斷言都會執(zhí)行):assertAll("用戶信息", () -> assertEquals("Alice", user.getName()), () -> assertEquals(30, user.getAge()) );
- 功能類似,但支持 lambda 表達式延遲計算:
4. 測試執(zhí)行順序
- JUnit 4:默認按方法名哈希排序,可通過
@FixMethodOrder控制 - JUnit 5:默認無序,可通過
@TestMethodOrder配合MethodOrderer控制(如按名稱、按注解順序等)
5. 參數(shù)化測試
允許使用不同參數(shù)多次運行同一測試方法。
JUnit 5 實現(xiàn)
需配合參數(shù)源注解(如 @ValueSource、@CsvSource 等):
@ParameterizedTest
@ValueSource(strings = {"apple", "banana", "cherry"})
void testStringLength(String fruit) {
assertTrue(fruit.length() > 3);
}
@ParameterizedTest
@CsvSource({"1, 2, 3", "4, 5, 9", "2, 3, 5"})
void testAdd(int a, int b, int expected) {
assertEquals(expected, a + b);
}
6. 異常測試
驗證方法是否拋出預期異常。
JUnit 4
@Test(expected = ArithmeticException.class)
public void testDivideByZero() {
int result = 1 / 0;
}
JUnit 5
@Test
void testDivideByZero() {
assertThrows(ArithmeticException.class, () -> {
int result = 1 / 0;
});
}
7. 超時測試
限制測試方法的執(zhí)行時間。
JUnit 4
@Test(timeout = 1000) // 毫秒
public void testLongRunningMethod() {
// 執(zhí)行耗時操作
}
JUnit 5
@Test
void testLongRunningMethod() {
assertTimeout(Duration.ofSeconds(1), () -> {
// 執(zhí)行耗時操作
});
}
8. 嵌套測試(JUnit 5)
通過 @Nested 注解創(chuàng)建嵌套測試類,增強測試結(jié)構(gòu)的可讀性:
class UserServiceTest {
@Nested
class WhenUserIsNew {
@Test
void shouldCreateUserSuccessfully() {
// 測試邏輯
}
}
@Nested
class WhenUserExists {
@Test
void shouldThrowDuplicateException() {
// 測試邏輯
}
}
}
9. 測試套件(Test Suite)
將多個測試類組合成一個套件執(zhí)行。
JUnit 4
@RunWith(Suite.class)
@Suite.SuiteClasses({UserTest.class, OrderTest.class})
public class AllTests {}
JUnit 5
@Suite
@SelectClasses({UserTest.class, OrderTest.class})
public class AllTests {}
10. 擴展機制(JUnit 5)
通過 Extension 接口實現(xiàn)自定義擴展,如:
- 測試前后的自定義邏輯
- 參數(shù)注入
- 異常處理等
11. 集成工具
- 構(gòu)建工具:Maven(通過
pom.xml)、Gradle 中配置 JUnit 依賴 - IDE:IntelliJ IDEA、Eclipse 內(nèi)置支持 JUnit 測試運行
- CI/CD:可與 Jenkins、GitHub Actions 等集成,自動執(zhí)行測試
掌握這些知識點可以幫助你編寫規(guī)范、高效的單元測試,提升代碼質(zhì)量和可維護性。實際使用中,JUnit 5 因其更靈活的特性,推薦作為首選版本。
總結(jié)
到此這篇關(guān)于Java中單元測試框架JUnit知識點整理的文章就介紹到這了,更多相關(guān)Java JUnit知識點內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java數(shù)組優(yōu)點和缺點_動力節(jié)點Java學院整理
本文給大家簡單介紹下java數(shù)組的優(yōu)點和缺點知識,需要的的朋友參考下吧2017-04-04
Spring Security實現(xiàn)基于角色的訪問控制框架
Spring Security是一個功能強大的安全框架,提供了基于角色的訪問控制、身份驗證、授權(quán)等安全功能,可輕松保護Web應用程序的安全,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-04-04
使用Servlet Filter實現(xiàn)系統(tǒng)登錄權(quán)限
這篇文章主要為大家詳細介紹了使用Servlet Filter實現(xiàn)系統(tǒng)登錄權(quán)限,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10
Spring?Boot?lombok在高版本idea中注解不生效的解決辦法
這篇文章主要介紹了Spring?Boot?lombok在高版本idea中注解不生效的解決辦法,文中介紹了三種解決方案,分別是使用ptg插件生成方法、添加Lombok依賴或指定1.18.30版本并清除構(gòu)建配置,需要的朋友可以參考下2025-05-05
Java Web端程序?qū)崿F(xiàn)文件下載的方法分享
這篇文章主要介紹了Java Web端程序?qū)崿F(xiàn)文件下載的方法分享,包括一個包含防盜鏈功能的專門針對圖片下載的程序代碼示例,需要的朋友可以參考下2016-05-05
SpringBoot整合Gson 整合Fastjson的實例詳解
這篇文章主要介紹了SpringBoot整合Gson 整合Fastjson的實例詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

