Tengo un proyecto de Android (en Windows) donde estoy tratando de ejecutar pepino-jvm como un no instrumentado “prueba de unidad”. Es decir, ejecutar funciones de Cucumber cuando ejecuto gradlew test
.
Aquí están los bits relevantes de mi aplicación build.gradle
:
android {
...
testOptions {
unitTests.all {
javaexec {
main = "cucumber.api.cli.Main"
classpath = getClasspath()
args = ['--plugin', 'pretty', '--glue', 'gradle.cucumber', 'src/test/java/cucumber/assets']
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
testImplementation 'io.cucumber:cucumber-java:3.0.2'
testImplementation 'io.cucumber:cucumber-junit:3.0.2'
}
cuando corro gradlew test --info
en la línea de comandos me sale el siguiente error:
Starting process 'command 'C:\Program Files\Java\jdk1.8.0_162\bin\java.exe''. Working directory: C:\dev\urig\android-cucumber\app Command: C:\Program Files\Java\jdk1.8.0_162\bin\java.exe -Dfile.encoding=windows-1252 -Duser.country=US -Duser.language=en -Duser.variant cucumber.api.cli.Main --plugin pretty --glue gradle.cucumber src/test/java/cucumber/assets
Successfully started process 'command 'C:\Program Files\Java\jdk1.8.0_162\bin\java.exe''
Error: Could not find or load main class cucumber.api.cli.Main
Me parece que el comando no contiene classpath y mi pregunta es: ¿por qué?
PD – He comprobado que en el momento de la llamada a javaexec
la llamada a getClasspath()
de hecho contiene todas las dependencias con este poco de Groovy: println getClasspath().any { println it }
PPS – Sé que el uso previsto de pepino-jvm es para instrumentado pruebas usando pepino-android. Tengo un caso de uso específico para ejecutar Cucumber como una “prueba de unidad local” (términos de Android, no los míos), por lo que lo anterior no me ayuda.
urig
Creo que he encontrado una solución para mi problema. Aquí está el código que funciona para mí:
testOptions {
unitTests.all {
def classpath2 = getClasspath()
javaexec {
main = "cucumber.api.cli.Main"
classpath = classpath2
args = ['--plugin', 'pretty', '--glue', 'gradle.cucumber', 'src/test/java/cucumber/assets']
}
}
}
Me parece que mi llamado original a getClassPath()
dentro de javaexec
El cierre devolvía una colección de archivos vacía. Al mismo tiempo, en el cierre por unitTests.all
, getClassPath()
contiene el classpath correcto.
Al pasar el classpath del cierre externo al cierre interno a través de una variable, cucumber.api.cli.Main
ahora se ejecuta correctamente y mis características de Cucumber se ejecutan como parte de Gradle test
tarea.