运行integTests时,intellij idea 14和gradle问题

时间:2015-03-05 00:20:55

标签: intellij-idea gradle

我有一个gradle项目导入到14.0.3中。集成测试从命令行运行良好。他们也在上下文菜单(运行单个测试)的构思13中运行时没有任何问题。但是,在14中,当我在IDE中使用上下文菜单时,由于某些原因,依赖于来自src / integTest / resources的类路径资源的测试由于找不到资源而失败。知道如何在Intellij 14的类路径搜索中添加此文件夹吗?有没有人见过这个问题?

如果我将相同的资源移动到src / test / resources(或src / main / resources),测试运行正常。因此看起来intellij不仅仅是在src / integTest / resources下查看。

感谢帮助!!

2 个答案:

答案 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上发布了重复的答案。我现在删除了我的答案(并在此添加了一个链接),因为我觉得它更适合这个问题。