第一章 JUnit5环境搭建:Android Studio配置、Gradle依赖声明、测试目录结构、运行确认
1.1 原理概述
JUnit5(Jupiter)是Java单元测试的最新框架,在Android开发中替代JUnit4提供更灵活的扩展模型、参数化测试、动态测试等能力。Android项目默认使用JUnit4,需手动切换至JUnit5。核心原理:通过Gradle引入junit-jupiter-api和junit-jupiter-engine,并配置testInstrumentationRunnerArguments或使用android-junit5插件实现测试引擎发现。
关键区别:JUnit5不再使用
@RunWith(AndroidJUnit4.class),而是通过@ExtendWith(AndroidExtension.class)或@AndroidJunit5注解;测试类和方法使用@Test(来自org.junit.jupiter.api),而非org.junit.Test。
1.2 实现流程
搭建JUnit5环境遵循以下步骤:
- 在Android Studio中新建或打开Android项目。
- 在模块级
build.gradle中添加JUnit5依赖及插件。 - 创建标准测试目录结构(
src/test/java或src/androidTest/java)。 - 编写第一个JUnit5测试类。
- 通过Android Studio运行测试并确认结果。
1.3 Gradle依赖声明
在模块级build.gradle(Kotlin DSL 或 Groovy)中添加以下配置:
// build.gradle.kts (Kotlin DSL)
plugins {
id("com.android.application")
kotlin("android")
id("de.mannodermaus.android-junit5") version "1.11.2.0" // JUnit5 插件
}
android {
// ... 正常配置
testOptions {
unitTests.all {
useJUnitPlatform() // 启用 JUnit5 平台
}
}
}
dependencies {
// JUnit5 依赖
testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")
testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.0") // 参数化测试
// Android 扩展(可选)
testImplementation("de.mannodermaus.junit5:android-test-extensions:2.2.0")
}
Groovy DSL版本:
// build.gradle (Groovy)
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'de.mannodermaus.android-junit5' version '1.11.2.0'
}
android {
testOptions {
unitTests.all {
useJUnitPlatform()
}
}
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.0'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.0'
testImplementation 'de.mannodermaus.junit5:android-test-extensions:2.2.0'
}
1.4 测试目录结构
Android标准项目测试目录如下:
app/
├── src/
│ ├── main/java/com/example/app/ ... 生产代码
│ ├── test/java/com/example/app/ ... 单元测试(JUnit5)
│ └── androidTest/java/com/example/app/ ... 仪器化测试(可同时使用JUnit5)
└── build.gradle
注意:src/test/java 目录下的测试类不依赖Android框架,运行在本地JVM;src/androidTest/java 目录需要Android设备或模拟器。JUnit5测试类必须存在于正确的目录中,否则Gradle无法识别。
提示:如果使用
android-junit5插件,仪器化测试也支持JUnit5(需额外配置androidTestImplementation依赖);本地测试推荐全部放在test目录,运行速度更快。
1.5 编写并运行第一个测试
创建测试类 ExampleTest.java(位于 app/src/test/java/com/example/app/):
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class ExampleTest {
@Test
void testAddition() {
int sum = 2 + 2;
assertEquals(4, sum, "2 + 2 should equal 4");
}
}
运行方式:
- 在测试类或方法左侧点击绿色三角形 ▶ 选择「Run」。
- 或通过Gradle任务:
./gradlew testDebugUnitTest。
运行后Android Studio会显示测试结果面板,绿色表示通过,红色表示失败。确认控制台输出包含「JUnit Jupiter」字样,表明使用的是JUnit5引擎。
常见错误:如果运行时报错「No tests found for given includes」,请检查:① 测试类是否位于正确的源集(
test或androidTest);② build.gradle中是否调用了useJUnitPlatform();③ 是否同时存在JUnit4和JUnit5的依赖导致冲突。建议排除JUnit4:testImplementation("junit:junit") { exclude group: 'junit' }。
1.6 调试与性能优化
调试JUnit5测试:在测试方法内设置断点,以Debug模式运行(点击绿色三角形选择「Debug」)。可通过build/reports/tests/test/目录查看HTML测试报告,便于分析失败原因。
性能优化建议:
- 使用
@TestInstance(TestInstance.Lifecycle.PER_CLASS)减少实例创建开销(尤其对参数化测试)。 - 避免在测试类中使用
@BeforeAll初始化大量资源,改用@BeforeEach。 - 启用Gradle缓存:
org.gradle.caching=true,避免重复编译未修改的测试。
| 配置项 | 作用 | 推荐值 |
|---|---|---|
useJUnitPlatform() | 启用JUnit5测试引擎 | 必须 |
testImplementation | 编译阶段依赖 | junit-jupiter-api |
testRuntimeOnly | 运行时引擎 | junit-jupiter-engine |
android-junit5插件 | 简化仪器化测试配置 | 可选 |
确认运行成功:若看到类似「Tests run: 1, Failures: 0」的输出,且测试类旁显示绿色对勾,则环境搭建完成。