运行 来自不同目录的 Cucumber 使用 Gradle 5 和 Cucumber-JVM

Running Cucumber from different directory using Gradle 5 and Cucumber-JVM

我是 Gradle 的新手,我使用的是 5.0 版。我相当精通 Cucumber。

我有一个构建 jar 文件和 运行s JUnit 测试的简单项目。一切正常。 现在我想将 Cucumber 添加到项目中,但我希望我的 .feature 文件和相关的 stepdefs 在另一个源代码树中(Gradle 术语中的 sourceSet)。

源代码可以在 Github 上找到,其中包含一个示例项目。

我的源代码树应该是这样的:

src/
    cucumberTest/
        java/
            /...
        resources/
            /...
    main/
        java/
            /...
        resources/
            /...
    test/
        /java
            /...
        resources/
            /...

当我将 .feature 文件放入 cucumberTest/resources 并将 stepdef java 文件放入 test/java 时,我的 Cucumber 测试 运行 正常。但是,当 stepdefs 在 cucumberTest/java 中时,Cucumber 找不到文件,我得到了它们未定义的错误。

Undefined scenarios:
src/cucumberTest/resources/is_it_saturday_yet.feature:4 # Sunday isn't Saturday

2 Scenarios (1 undefined, 1 passed)
6 Steps (1 skipped, 2 undefined, 3 passed)
0m0.134s

我的 build.gradle 文件是这样的:

plugins {
    id 'java-library'
    id 'java'
    id 'idea'
}

repositories {
    jcenter()
    mavenCentral()
}

archivesBaseName = "helloworld"
version = '1.0'

dependencies {
    api 'org.apache.commons:commons-math3:3.6.1'

    implementation 'com.google.guava:guava:26.0-jre'

    testImplementation 'junit:junit:4.12'
    testCompile("junit:junit:4.12")
    testCompile('org.junit.jupiter:junit-jupiter-api:5.3.2')
    testCompile('org.junit.jupiter:junit-jupiter-params:5.3.2')

    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.3.2')
    testRuntime("org.junit.vintage:junit-vintage-engine:5.3.2")

    testCompile 'io.cucumber:cucumber-java:4.2.0'
    testCompile 'io.cucumber:cucumber-junit:4.2.0'
}

configurations {
    cucumberRuntime {
        extendsFrom testRuntime
    }
}

test {
    useJUnitPlatform ()
    testLogging {
        events "passed", "skipped", "failed"
    }
}

// Cucumber stuff:

sourceSets {
    cucumberTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

configurations {
    cucumberTestImplementation.extendsFrom implementation
    cucumberTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
    testCompile 'io.cucumber:cucumber-java:4.2.0'
    testCompile 'io.cucumber:cucumber-junit:4.2.0'
}

task cucumberTest() {
    dependsOn assemble, compileTestJava
    doLast {
        javaexec {
            main = "cucumber.api.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output + sourceSets.cucumberTest.output
            args = ['--plugin', 'pretty', '--glue', 'stepdefs.hellocucumber', 'src/cucumberTest/resources']
        }
    }
}

wrapper {
    gradleVersion = '5.0'
}

我浏览了整个网络,但我觉得我是唯一一个想将 cucumber-jvm 与 Gradle 5 一起使用并将 BDD 测试(黄瓜)与 TDD 分开的人测试(JUnit)。

我可以采取简单的方法,将它们混合使用,但除了有点清教徒并将 BDD 和 TDD 分开之外,我还想了解发生了什么以及为什么它不起作用。

感谢您的帮助。谢谢。

伊万

在我的好朋友 Bart Kors 的帮助下,我能够让它按预期工作。我更新了 Github 存储库以包含工作代码。克隆 TrheeAxis/hellocucumber 以获得工作代码。