2017-04-04 65 views
1

我試圖按照https://selimober.com/gradle_unit_integration/分離單元和集成測試的gradle中使用Groovy

使用略有不同的文件結構:

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

運行「gradle這個一體化」 - 編譯運行正常和類文件出現在:

build/classes/integration 
build/classes/main/ 

但測試本身從未運行。我認爲我錯過了依賴關係中的一個部分或集成到運行測試的鏈接,但無法弄清楚我錯過了什麼。除非它是我必須要改變的文件結構,並有測試在TASKNAME像

我試圖加入 「integrationTest」:

​​

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 } 
} 
+0

也許嘗試的src /測試/常規/集成或SRC /集成/常規/。也許相關:http://stackoverflow.com/questions/40182439/how-do-i-separate-gradle-unit-tests-from-integration-tests-in-the-same-source-se –

回答

1

的問題是在包括任務:

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

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

你不需要的是,該文件夾是由源集定義。這些包括導致測試僅限於包含「單元」的類。 「積分」。

刪除那個,你的測試應該運行。

BTW,你不需要這些既不排除:

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

這工作!謝謝:) – BigMac

+0

@BigMac在這種情況下,你會考慮接受答案嗎? :) – sm4