Gradle执行JUnit5单元测试第二次被跳过的原因咨询
为什么第二次执行
./gradlew test时测试被跳过? 嗨,这其实是Gradle增量构建的核心特性在起作用,完全是正常现象,别担心~
原因解析
Gradle会智能跟踪每个任务的输入(比如你的源代码、测试代码、依赖库)和输出(编译后的class文件、测试报告等)。当它检测到某个任务的输入没有发生任何变化时,就会标记这个任务为UP-TO-DATE,直接跳过执行——因为它认为之前的执行结果已经是最新的,没必要重复干活。
看你给出的输出:
$ ./gradlew test :compileJava NO-SOURCE :processResources NO-SOURCE :classes UP-TO-DATE :compileTestJava UP-TO-DATE :processTestResources NO-SOURCE :testClasses UP-TO-DATE :junitPlatformTest UP-TO-DATE :test SKIPPED
这里compileTestJava和junitPlatformTest都标记为UP-TO-DATE,说明你的测试代码、主代码以及相关依赖都没有任何改动,所以依赖这些前置任务的test自然就被跳过了。
如何重新运行测试
如果你确实需要重新执行测试,可以用以下几种方法:
- 彻底清理后重新构建:执行
./gradlew clean test,clean会删除之前所有的构建产物,这样所有任务都会从头开始执行。 - 强制重新运行test任务:执行
./gradlew test --rerun,这个命令会强制重新运行test及其相关任务,不用清理整个项目,效率更高。 - 修改代码触发自动执行:只要你改动任意主代码或测试代码,Gradle就会检测到输入变化,自动重新执行对应的编译和测试任务。
- 运行特定测试类/方法:如果只想重新跑某个测试类,用
./gradlew test --tests "你的包名.测试类名",甚至可以指定单个测试方法:./gradlew test --tests "你的包名.测试类名.测试方法名"。
这种增量构建是Gradle提升构建效率的关键,平时不用刻意去禁用它,只有当你需要验证测试结果或者排查问题时,再用上面的方法触发重新执行就好~
内容的提问来源于stack exchange,提问作者matze999
相关产品推荐
相关产品推荐

