【问题标题】:separating unit and integrations tests in gradle with groovy用 groovy 在 gradle 中分离单元和集成测试
【发布时间】:2017-04-04 21:13:19
【问题描述】:

我正在尝试关注https://selimober.com/gradle_unit_integration/

使用稍微不同的文件结构:

src/test/integration/groovy
src/test/unit/groovy
src/test/resources

运行“gradle integration” - 编译运行正常,类文件出现在:

build/classes/integration
build/classes/main/

但测试本身永远不会运行。我认为我缺少依赖项中的一部分或将集成链接到运行测试,但无法弄清楚我缺少什么。除非我必须更改文件结构并在任务名称中包含测试,例如“integrationTest”

我已经尝试添加:

check.dependsOn integration  

integrationCompile sourceSets.main.output
integrationCompile configurations.testCompile
integrationCompile sourceSets.test.output
integrationRuntime configurations.testRuntime

task integ(type: Test) {  
    testClassesDir = sourceSets.integ.output.classesDir
    classpath = sourceSets.integ.runtimeClasspath
}

但这要么没有改变任何东西,要么给了我这样的错误:

Could not find method integrationCompile() for arguments [main classes] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

感谢您的帮助。

我的 build.gradle 文件:

apply plugin: 'groovy'

repositories {
   maven {
             url repository_url
             credentials {
                 username = artifactory_user
                 password = artifactory_password
             }
         }
}

dependencies {
    compile(
        'com.oracle:ojdbc6:11.2.0.1.0',
        'javax.xml.bind:jsr173_api:1.0',
        'org.apache.directory:groovy-ldap:1.0',
        'org.codehaus.groovy:groovy-all:2.4.5',
        'weblogic:wlfullclient:10.3.6',
        'javax.jms:jms:1.1'
    )

    testCompile(
        'junit:junit:4.12',
        'org.spockframework:spock-core:1.0-groovy-2.4'
    )
}

sourceSets {
    unit {
        groovy {
            srcDir file('src/test/unit/groovy')
            exclude '**/integration/**'
        }
        resources {
            srcDir file('src/test/resources')
        }
        compileClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
        runtimeClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
    }

    integration {
        groovy {
            srcDir 'src/test/integration/groovy'
            exclude '**/unit/**'
        }
        resources {
            srcDir 'src/test/resources'
        }
        compileClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
        runtimeClasspath += sourceSets.main.output + sourceSets.test.output + configurations.testRuntime
        }
    }

configurations {
    unitCompile.extendsFrom testCompile
    unitRuntime.extendsFrom testRuntime

    integrationCompile.extendsFrom testCompile
    integrationRuntime.extendsFrom testRuntime
}

task unit(type: Test) {
    include '**/unit/**'
    testClassesDir = sourceSets.unit.output.classesDir
    classpath = sourceSets.unit.runtimeClasspath
}

task integration(type: Test) {
    include '**/integration/**'
    testClassesDir = sourceSets.integration.output.classesDir
    classpath = sourceSets.integration.runtimeClasspath
    outputs.upToDateWhen { false }
}

【问题讨论】:

标签: unit-testing gradle groovy integration-testing


【解决方案1】:

问题出在您的任务中:

task unit(type: Test) {
    include '**/unit/**'
}

task integration(type: Test) {
    include '**/integration/**'
}

您不需要,文件夹由源集定义。包含导致测试仅限于包中包含“单元”的类。 “整合”。

删除它,您的测试应该会运行。

顺便说一句,你不需要这些也不排除:

sourceSets {
    unit {
        groovy {
            exclude '**/integration/**'
        }
    }
}

【讨论】:

  • @BigMac 在这种情况下,您会考虑接受答案吗? :)
【解决方案2】:

将您的依赖项放在源集和配置之后。为我工作。

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 2016-01-23
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2011-12-11
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多