从这个问题开始。
如果我有一个包含两个Test
任务实例的构建,那么完全分离这两个任务以使其输出不重叠的最佳(最干净、最少代码、最健壮)的方法是什么?
我已经尝试设置它们的testResultsDir
和testReportsDir
属性,但这似乎没有按预期工作。(也就是说,输出被写入单独的目录,但两个任务仍然在每次运行时重新运行各自的测试。)
从 gradle 1.8 开始更新当前情况:自 gradle 1.3 起,dty 的答案中的 testReportDir 和 reportsDir 属性已被弃用。测试结果现在在“test-results”目录中自动分离,并为 HTML 报告设置不同的目标目录,调用
tasks.withType(Test) {
reports.html.destination = file("${reporting.baseDir}/${name}")
}
再一次,Rene 为我指明了正确的方向。谢谢你,雷内。
事实证明,这种方法确实有效,但我一定是做错了什么。
Test
作为参考,在定义了所有任务后,我在构建中添加了以下内容:
tasks.withType(Test) {
testReportDir = new File("${reportsDir}/${testReportDirName}/${name}")
testResultsDir = new File("${buildDir}/${testResultsDirName}/${name}")
}
通过将任务名称作为其目录层次结构的一部分,这将导致Test
任务的所有实例彼此隔离。
但是,我仍然觉得这有点邪恶,并且必须有一种更清洁的方法来实现这一点,我还没有找到!
Ingo Kegel 的回答没有解决结果目录,只有报告目录。这意味着可以构建特定测试类型的测试报告,其中包含比该类型更多的测试结果。这也可以通过设置结果目录来解决。
tasks.withType(Test) {
reports.html.destination = file("${reporting.baseDir}/${name}")
reports.junitXml.destination = file("${testResultsDir}/${name}")
}
只是一个更新。该reports.html.destination
方式已弃用。
这是“新”方式(Gradle > 4.x):
tasks.withType(Test) {
reports.html.setDestination file("${reporting.baseDir}/${name}")
}