我已经设置了成绩脚本 . 当我执行Gradle构建时,一切正常,它运行jUnit测试 .
之后,当我运行Gradle测试时,我得到以下内容:
C:\Users\..\..\Project>gradle test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
当我执行 gradle clean
,然后Gradle构建工作,当然...我希望能够只重置测试,而不是构建整个项目:我该怎么做?
7 回答
一种选择是使用command line中的
--rerun-tasks
标志 . 这将重新运行所有测试任务及其依赖的所有任务 .如果您只对重新运行测试感兴趣,那么另一个选择是在执行测试之前使gradle清理测试结果 . 这可以使用
cleanTest
任务完成 .一些背景--Java插件为每个其他任务定义了一个干净的任务 . 根据documentation:
因此,为了重新运行测试,您所需要的只是运行
cleanTest
任务,即:gradle cleanTest test
其他选项是在build.gradle中添加以下内容:
gradle test --rerun-tasks
资料来源:https://gradle.org/docs/current/userguide/gradle_command_line.html
这是使用“build.gradle”文件的解决方案,以防您不想修改命令行:
这是输出 . 注意先前输出的2个变化:
1)输出中出现一个新的“cleanTest”任务 .
2)'test'总是被清理(即永远不会'UP-TO-DATE'),所以它每次都被执行:
此外,必须添加
--rerun-tasks
实际上是多余的 . 永远不会发生cleanTask
创建--no-rerun-tasks
并使--rerun-tasks
默认为cleanTask
这是最近关于Gradle的博客文章Stop rerunning your tests的主题 . author显示了一个使用
outputs.upToDateWhen { false }
的示例,并解释了为什么它是错误的:然后,作者继续解释为什么重新运行一些测试是浪费时间:
在少数情况下,如果您希望重新运行代码未更改的测试,则应将其建模为输入 . 以下是博客文章中的两个示例,其中显示了添加输入,因此任务将在其最新检查期间使用它 .
我建议阅读整篇博文 .
我认为这是一个有效的问题,因为在Gradle中可以运行这个命令
test
,会发生什么事情都没有发生!但我会质疑是否有必要这样做,正如Jolta在他的评论中所说:如果没有代码改变,你为什么需要重新测试?如果您对第三方输入有疑问,我会说您需要在应用程序代码中满足此要求 . 如果您担心您的代码可能“片状”,即能够第一次通过所有测试而不是第二次(或第100次),那么您是否需要考虑为什么会遇到这些疑问并解决它们?
我个人认为这是Gradle中的一个(非常小的)设计错误:如果一切都是最新的,而不是“ Build 成功”,它应该说“自上一次成功 Build 以来没有改变:没有做过” .