在 Java 工程中,可以混合使用 JUnit 4 和 JUnit 5,但需要一些額外的配置,因為 JUnit 4 和 JUnit 5 是兩個獨立的測試框架,它們的執行方式和依賴不同。為了支援同時執行 JUnit 4 和 JUnit 5 測試,需要引入 JUnit Vintage
引擎,它提供對 JUnit 4 的相容性支援。
如何混合使用 JUnit 4 和 JUnit 5
以下是具體步驟,幫助你在 Java 專案中同時使用 JUnit 4 和 JUnit 5。
1. 引入 Maven 依賴
在 pom.xml
中,需要引入 JUnit 5 和 JUnit Vintage
引擎來支援 JUnit 4。以下是需要的依賴項:
<dependencies>
<!-- JUnit 5 依賴 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
<!-- JUnit Vintage Engine 用於執行 JUnit 4 -->
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
<!-- JUnit 4 依賴 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- Mockito 用於單元測試(如果需要) -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
2. Gradle 依賴配置
如果你使用 Gradle 而不是 Maven,可以在 build.gradle
中新增類似的依賴:
dependencies {
// JUnit 5
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.2'
// JUnit 4
testImplementation 'junit:junit:4.13.2'
// JUnit Vintage Engine for JUnit 4 support in JUnit 5
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.9.2'
// Mockito (if needed)
testImplementation 'org.mockito:mockito-core:4.8.1'
}
3. 配置 IDE 或構建工具
- IntelliJ IDEA 和 Eclipse 等現代 Java IDE,通常在檢測到專案中同時使用 JUnit 4 和 JUnit 5 依賴時,會自動處理並提供混合執行的支援。你只需確保專案配置正確,IDE 會自動識別兩種測試。
- Maven 和 Gradle 也能夠自動執行混合測試。只要
JUnit Vintage
引擎配置正確,Maven 和 Gradle 的test
任務會執行兩種測試框架下的測試用例。
4. 編寫測試
在專案中,你可以同時編寫 JUnit 4 和 JUnit 5 的測試程式碼。以下是 JUnit 4 和 JUnit 5 測試的基本示例。
- JUnit 4 測試:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class JUnit4Test {
@Test
public void testAddition() {
assertEquals(4, 2 + 2);
}
}
- JUnit 5 測試:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class JUnit5Test {
@Test
void testAddition() {
assertEquals(4, 2 + 2);
}
}
5. 注意事項
- JUnit Vintage 引擎用於在 JUnit 5 環境下執行 JUnit 4 測試。沒有
JUnit Vintage
,你的 JUnit 4 測試將無法執行。 - 確保測試類的命名方式符合 JUnit 4 或 JUnit 5 的約定,否則某些測試可能不會被正確識別。例如,JUnit 5 的測試類和方法無需使用
public
修飾符,而 JUnit 4 則需要。 - 如果你使用
Mockito
等第三方庫來進行mock
,確保它們與 JUnit 5 相容。大多數流行的庫已經支援 JUnit 5。
6. JUnit 4 與 JUnit 5 特性比較
- JUnit 4 使用
@Test
,@Before
,@After
,@BeforeClass
,@AfterClass
等註解來管理測試生命週期。 - JUnit 5 使用新的
@Test
,@BeforeEach
,@AfterEach
,@BeforeAll
,@AfterAll
註解,並引入了更多特性,如動態測試、巢狀測試、引數化測試等。
總結
- 透過引入
JUnit Vintage
引擎,你可以在同一專案中混合使用 JUnit 4 和 JUnit 5。 JUnit 4
測試仍然可以正常執行,而JUnit 5
為新開發提供了更強大的特性支援。- 使用現代 IDE 或構建工具如 Maven 和 Gradle,可以輕鬆處理混合使用的情況。
這種方式允許你逐步遷移到 JUnit 5,而無需一次性重寫所有現有的 JUnit 4 測試。