2012-09-28 61 views
2

我有一个非常标准的构建Java项目的Gradle构建。为什么我的Gradle测试反复运行?

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

根据this thread,如果没有任何变化,Gradle应该被defaut懒惰并且不会打扰运行测试。这里的默认行为是否已更改?

编辑:

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

回答

2

OK,所以我得到的答案感谢刘若英促使我去看看“i”可输出...

我其实有2项测试任务:“测试'来自Java插件,还有我自己的'integrationTest'。我没有在这个问题中提到这个,因为我不认为这是相关的。

事实证明,这些任务正在将他们的输出(报告等)写入同一个目录,所以Gradle的基于任务的输入和输出跟踪正在考虑发生了某些变化,并重新运行测试。所以下一个问题(我会另外问)变成:我怎么干净地(并且最小的Groovy/Gradle代码)完全分开两个测试任务实例。

2

gradle uptodate检查登录信息级别为什么任务不被认为是最新的。请重新运行“gradle build -i”以检查日志记录输出并使用info logging进行运行。

欢呼声, 勒

0

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

此外,关于您的构建问题。 “构建”任务包括一个干净的步骤,即从构建目录清除测试。否则,执行认为测试已经运行。

相关问题