Ejecutando Cucumber desde un directorio diferente usando Gradle 5 y Cucumber-JVM

2 minutos de lectura

Avatar de usuario de Arc-E-Tect
Arc-E-Tect

Soy bastante nuevo en Gradle y estoy usando la versión 5.0. Soy razonablemente competente en Cucumber.

Tengo un proyecto simple que crea un archivo jar y ejecuta pruebas JUnit en ellos. Todo funciona bien. Ahora quiero agregar Cucumber al proyecto, pero quiero mis archivos .feature y los stepdefs relacionados en un árbol de origen alternativo (sourceSet en la terminología de Gradle).

Las fuentes se pueden encontrar en Githubque contiene un proyecto de muestra.

Mi árbol de fuentes debería verse así:

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

Cuando coloco los archivos .feature en cucumberTest/resources y los archivos stepdef java en test/java, mis pruebas de Cucumber funcionan bien. Pero cuando los stepdefs están en cucumberTest/java Cucumber no puede encontrar los archivos y aparece el error de que no están definidos.

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

Mi archivo build.gradle es este:

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'
}

He buscado por toda la web, pero siento que soy el único que quiere usar pepino-jvm con Gradle 5 y tener las pruebas BDD (pepino) separadas de las pruebas TDD (JUnit).

Puedo tomar la ruta fácil y mezclarlos a ambos, pero además de ser un poco puritano y tener BDD y TDD separados, también quiero entender qué está pasando y por qué no funciona.

Se agradece la ayuda. Gracias.

Iwán

Con la ayuda de Bart Kors, un buen amigo mío, pude hacer que funcionara según lo previsto. Actualicé el repositorio de Github para incluir el código de trabajo. Haz un clon de TrheeAxis/hola pepino para obtener el código de trabajo.

¿Ha sido útil esta solución?