java - 使用Gradle 5和Cucumber-JVM从不同目录运行Cucumber

标签 java gradle cucumber build.gradle cucumber-jvm

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

我有一个简单的项目,该项目构建一个jar文件并在其上运行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测试运行良好。但是,当stepdef位于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'
}

我在网上浏览了所有内容,但是我觉得我是唯一想在Gradle 5上使用Cucumber-jvm并将BDD测试( cucumber )与TDD测试(JUnit)分开的人。

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

感谢帮助。谢谢。

我要

最佳答案

在我的好 friend Bart Kors的帮助下,我得以按预期工作。我更新了Github存储库以包含工作代码。复制TrheeAxis/hellocucumber以获取工作代码。

关于java - 使用Gradle 5和Cucumber-JVM从不同目录运行Cucumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841985/

相关文章:

javascript - 是否可以以编程方式运行 Cucumber.js?

javascript - Nightwatch 无法导航到 url

java - 如何使用定时器动态调整帧大小?

java - 从 ArrayList 打印带有空格的字符串不正确

java - 如何在Java中获取RabbitMQ的当前IP地址?

gradle - 有没有办法使gradle项目的配置为零?

java数组: split elements

android - Gradle 同步问题 : None of the consumable configurations have attributes

java - Eclipse Gradle 集成错误 - 安装软件已鼓励

java - 独立运行每个 cucumber 测试