运行 来自不同目录的 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 以获得工作代码。
我是 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 以获得工作代码。