我有一个gradle项目导入到14.0.3中。集成测试从命令行运行良好。他们也在上下文菜单(运行单个测试)的构思13中运行时没有任何问题。但是,在14中,当我在IDE中使用上下文菜单时,由于某些原因,依赖于来自src / integTest / resources的类路径资源的测试由于找不到资源而失败。知道如何在Intellij 14的类路径搜索中添加此文件夹吗?有没有人见过这个问题?
如果我将相同的资源移动到src / test / resources(或src / main / resources),测试运行正常。因此看起来intellij不仅仅是在src / integTest / resources下查看。
感谢帮助!!
答案 0 :(得分:1)
我之前也遇到过此问题,请将以下内容添加到build.gradle
文件中:
// work-around to fix IDE-run test failures (may be fixed in future Gradle versions)
task copyMainResourcesToTest(type: Copy) {
from "${projectDir}/src/main/resources"
into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyMainResourcesToTest
task copyTestResourcesToTest(type: Copy) {
from "${projectDir}/src/test/resources"
into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResourcesToTest
我认为这可能会在Gradle的最新版本中得到解决,但我还没有验证。您需要更新特定用例的路径。
答案 1 :(得分:1)
在IntelliJ 14中看起来这是Bug(IDEA-128966)。 推荐的解决方法是这样的:
sourceSets {
integrationTest {
java.srcDir file('src/integTest/java')
resources.srcDir file('src/integTest/resources')
}
if(System.properties.'idea.active') {
main {
resources.srcDir file('src/integTest/resources')
}
}
}
对于我们的项目,我将其更改为:
if(System.properties.'idea.active') {
test { //Add to test rather than main
这仍然有效,我认为它可以更好地传达意图。
此变通方法假设您已在build.gradle
:
apply plugin: 'idea'
sourceSets {
integrationTest {
java.srcDir file('src/integTest/java')
resources.srcDir file('src/inteTest/resources')
}
}
configurations {
integrationTestCompile.extendsFrom testCompile
integrationTestRuntime.extendsFrom testRuntime
}
task integrationTest(type: Test, dependsOn: jar) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
}
build.dependsOn(integrationTest)
注意:此答案最初是由主持人删除的,因为我在another question上发布了重复的答案。我现在删除了我的答案(并在此添加了一个链接),因为我觉得它更适合这个问题。