2017-04-04 68 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