I have the following project structure:

MyProject
   --src
   --test
      --acceptance
         --java
         --resources
      --unit

and the following build.gradle

apply plugin: 'java'
apply plugin: 'idea'

version = '0.1'

repositories {
    mavenCentral()
}

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
    unit {
        java {
            srcDir 'test/unit'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
    acceptance {
        java {
            srcDir 'test/acceptance/java'
        }
        resources {
            srcDir 'test/acceptance/resources'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
}

dependencies {
    compile fileTree(dir: 'lib', include: '*.jar')

    unitCompile group: 'junit', name: 'junit', version: '4.11'

    acceptanceCompile group: 'junit', name: 'junit', version: '4.11'
    acceptanceCompile group: 'info.cukes', name: 'cucumber-junit', version: '1.1.3'
    acceptanceCompile group: 'info.cukes', name: 'cucumber-java', version: '1.1.3'
}


task unitTest(type: Test) {
    description = "Runs Unit Tests"
    classpath += sourceSets.unit.runtimeClasspath
    testClassesDir = sourceSets.unit.output.classesDir
}


task acceptanceTest(type: Test) {
    description = "Runs Acceptance Tests"
    classpath += sourceSets.acceptance.runtimeClasspath
    testClassesDir = sourceSets.acceptance.output.classesDir
}

but running 'gradle acceptanceTest' leads to compilation issues as it looks like the dependencies are not found on the classpath.

有帮助吗?

解决方案

It looks like in version 1.1.3, the Cucumber class is in package

cucumber.api.junit

rather than

cucumber.junit

Changing the import statement seems to have resolved the classpath issue at least.

However, there are issues with running Cucumber JUnit tests through gradle. Further information, and a workaround using a javaexec task is given here: https://github.com/yatskevich/cucumber-jvm-gradle-javaexec. In summary, with the below task:

  task cucumber() {
    dependsOn assemble, compileAcceptanceJava
    doLast {
        javaexec {
            main = "cucumber.api.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output +
                    sourceSets.acceptance.output + sourceSets.unit.runtimeClasspath +
                    sourceSets.acceptance.runtimeClasspath

            args = ['-f', 'junit:build/reports/test-results/cucumber.xml',
                    '-f', 'html:build/reports/test/cucumber-tests.html',
                    '--glue', 'com.paragon', 'test/acceptance/features']
        }
    }
}

we can now run

gradle cucumber

and generate the JUnit report.

其他提示

the syntax

srcDir 'path/to/src/dir'

is adding an additionally directory instead of replacing the default locations.

instead use

srcDrs = ['path/to/src/dir']

this should do the trick

cheers, rene

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top