Запуск Cucumber из другого каталога с использованием Gradle 5 и Cucumber-JVM - PullRequest
0 голосов
/ 19 декабря 2018

Я довольно новичок в 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, я также хочу понять, что происходит и почему это не работает.

Помощь приветствуется.Спасибо.

Иван

1 Ответ

0 голосов
/ 23 декабря 2018

С помощью моего хорошего друга Барта Корса я смог заставить его работать как положено.Я обновил репозиторий Github, чтобы включить рабочий код.Сделайте клон TrheeAxis / hellocucumber , чтобы получить рабочий код.

...