为什么我的Gradle测试会重复运行?

rdrgkggo  于 2023-11-18  发布在  其他
关注(0)|答案(3)|浏览(145)

我有一个非常标准的Gradle构建,它正在构建一个Java项目。
当我第一次运行它时,它编译所有内容并运行测试。当我第二次运行它而不更改任何文件时,它再次运行测试。
根据this thread,Gradle默认应该是懒惰的,如果什么都没有改变,就不需要运行测试。这里的默认行为是否改变了?
编辑:
如果我重复运行gradle test,测试只会在第一次运行时被跳过。但是,如果我重复运行gradle build,测试每次都会重新运行,即使所有其他任务都标记为最新。

bz4sfanl

bz4sfanl1#

好吧,我得到了答案感谢Rene prompting me to look at the '-i' output
我实际上有两个测试任务:来自Java插件的“测试”任务,以及我自己的“集成测试”任务。我没有在问题中提到这一点,因为我认为这无关紧要。
事实证明,这些任务将其输出(报告等)写入同一个目录,因此Gradle基于任务的输入和输出跟踪认为发生了变化,并重新运行测试。
因此,next question是如何干净地-并且使用最少的Groovy/Gradle代码-分离测试任务的两个示例。

k4ymrczo

k4ymrczo2#

gradle uptodate检查在信息级别上记录为什么任务不被认为是最新的。请在检查日志输出时将gradle build -i设置为使用信息日志运行。

af7jpaap

af7jpaap3#

您需要在build.gradle中创建测试任务,然后调用这些特定的任务来运行特定的测试集。下面是一个示例,它将过滤掉类,以便它们不会被运行两次(例如当运行一个套件时,然后独立地重新运行它的子类):

tasks.withType(Test) {
    jvmArgs '-Xms128m', '-Xmx1024m', '-XX:MaxPermSize=128m'
    maxParallelForks = 4  // this runs tests parallel if more than one class
    testLogging {
        exceptionFormat "full"
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        displayGranularity = 0
    }   
}
task runAllTests(type: Test) {
    include '**/AllTests.class'
    testReportDir = file("${reporting.baseDir}/AllTests")
    testResultsDir = file("${buildDir}/test-results/AllTests")
}
task runSkipSuite(type: Test) {
    include '**/Test*.class'
    testReportDir = file("${reporting.baseDir}/Tests")
    testResultsDir = file("${buildDir}/test-results/Tests")
}

字符串
另外,关于你的构建问题。“构建”任务包括一个清理步骤,即从你的构建目录中清理测试。否则执行会认为测试已经运行。

相关问题