Я довольно новичок в Gradle и использую версию 5.0.Я достаточно опытный в Cucumber.
У меня есть простой проект, который создает JAR-файл и запускает на нем тесты JUnit.Все работает хорошо.Теперь я хочу добавить Cucumber в проект, но мне нужны мои файлы .feature и соответствующие stepdefs в альтернативном дереве исходных текстов (sourceSet в терминологии Gradle).
Источники можно найти на Github , который содержит образец проекта.
Мое исходное дерево должно выглядеть следующим образом:
src/
cucumberTest/
java/
/...
resources/
/...
main/
java/
/...
resources/
/...
test/
/java
/...
resources/
/...
Когда я помещаю файлы .feature в cucumberTest / resources и java-файлы stepdef в 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 (cucumber) от тестов TDD (JUnit).
Я могу пойти по простому маршруту и просто смешать их обоих, но помимо того, что я немного пуританин и разделил BDD и TDD, я также хочу понять, что происходит и почему это не работает.
Помощь приветствуется.Спасибо.
Иван