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

为什么我的Gradle测试会重复运行?,gradle,Gradle,我有一个非常标准的Gradle构建,它正在构建一个Java项目 当我第一次运行它时,它会编译所有内容并运行测试。当我第二次运行它而不更改任何文件时,它会再次运行测试 据他所说,Gradle被认为是懒惰的,如果什么都没有改变,他就不必费心运行测试。这里的默认行为是否已更改 编辑: 如果我反复运行gradle测试,测试只会第一次运行,随后会被跳过。但是,如果我反复运行gradle build,每次都会重新运行测试,即使所有其他任务都标记为最新。gradle Update检查记录在信息级别上,说明为什

我有一个非常标准的Gradle构建,它正在构建一个Java项目

当我第一次运行它时,它会编译所有内容并运行测试。当我第二次运行它而不更改任何文件时,它会再次运行测试

据他所说,Gradle被认为是懒惰的,如果什么都没有改变,他就不必费心运行测试。这里的默认行为是否已更改

编辑:


如果我反复运行
gradle测试
,测试只会第一次运行,随后会被跳过。但是,如果我反复运行
gradle build
,每次都会重新运行测试,即使所有其他任务都标记为最新。

gradle Update检查记录在信息级别上,说明为什么任务不被认为是最新的。请在检查日志输出时重新运行“gradle build-i”以使用信息日志运行

干杯,
René

渐变最新检查记录在信息级别,说明为什么任务不被认为是最新的。请在检查日志输出时重新运行“gradle build-i”以使用信息日志运行

干杯,
勒内

好的,多亏勒内提醒我查看'-I'输出,我才得到了答案

我实际上有两个测试任务:来自Java插件的“测试”任务和我自己的“集成测试”任务。我在问题中没有提到这一点,因为我认为这不相关

事实证明,这些任务正在将其输出(报告等)写入同一个目录,因此Gradle基于任务的输入和输出跟踪认为发生了变化,并重新运行测试


因此,下一个问题(我将单独提问)是:如何干净地(并且使用最少的Groovy/Gradle代码)完全分离测试任务的两个实例。

好的,由于Rene提示我查看“-I”输出,我得到了答案

我实际上有两个测试任务:来自Java插件的“测试”任务和我自己的“集成测试”任务。我在问题中没有提到这一点,因为我认为这不相关

事实证明,这些任务正在将其输出(报告等)写入同一个目录,因此Gradle基于任务的输入和输出跟踪认为发生了变化,并重新运行测试


因此,下一个问题(我将单独提问)是:如何干净地(并且使用最少的Groovy/Gradle代码)完全分离测试任务的两个实例。

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


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

您需要在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")
}