J'ai du mal à exécuter des tests de concombre à Gradle. J'utilise concombre-jvm.
La classe TestNGCucumberRunner
étend les annotations AbstractTestNGCucumberTests
et testng avec @beforesuite
, @aftersuite
..
Je lance généralement le TestNGCucumberRunner.Java
dans IntelliJ par un clic droit et il s'exécute avec succès. Maintenant je veux
ou
J'ai essayé d'exécuter le TestNGCucumberRunner.Java en tant que javaexec mais cela échoue.
J'ai essayé d'exécuter tous les fichiers de fonctionnalités du package. J'ai utilisé apply plugin: 'com.github.samueltbrown.cucumber'
aussi.
Ma nouvelle configuration utilise un autre plugin qui prend en charge l'exécution parallèle de scénarios, de meilleurs rapports et est toujours activement maintenu:
build.gradle
plugins {
...
id "com.commercehub.cucumber-jvm" version "0.11"
}
addCucumberSuite 'cucumberTest'
dependencies {
...
cucumberTestCompile 'info.cukes:cucumber-Java:1.2.5' // or -Java8 if you prefer lambda notation
}
structure du répertoire :
└── src
├── cucumberTest
│ ├── Java
│ │ └── package1
│ └── <- Glue
│ └── resources
│ └── package2
│ └── <- Features
├── main
│ └── Java
└── test
└── Java
package1 et package2 noms (ainsi que de nombreux autres options ) peuvent être spécifiés dans le fichier build.gradle
Ma configuration précédente pour utiliser le concombre pour Java avec gradle.
build.gradle
plugins {
id "Java"
id "com.github.samueltbrown.cucumber" version "0.9"
}
dependencies {
cucumberCompile 'info.cukes:cucumber-Java:1.2.4'
}
cucumber {
formats = ['pretty','junit:build/cucumber.xml']
}
Disposition du répertoire
└── src
├── cucumber
│ ├── Java <- Glue
│ └── resources <- Features
└── main
│ └── Java
└── test
└── Java
Commande
gradle cucumber
J'ai choisi de ne pas utiliser com.github.samueltbrown.cucumber
plugin, il a été mis à jour pour la dernière fois en août 2015. Au lieu de cela, j'ai créé un ensemble de sources "integrationTest" (concombre) que je peux créer indépendamment. C'est-à-dire un simple gradle build
construira les ensembles source test
et integrationTest
. Si je souhaite uniquement exécuter des tests d'intégration, je peux exécuter gradle integrationTest -x test
, ou je ne peux exécuter que le test avec gradle test -x integrationTest
.
Les étapes que j'ai suivies sont ici: http://www.petrikainulainen.net/programming/gradle/getting-started-with-gradle-integration-testing/
Mais voici le résumé:
build.gradle
sourceSets {
integrationTest {
Java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('src/integrationTest/Java')
}
resources.srcDir file('src/integrationTest/resources')
}
}
//Ensure that the integrationTestCompile/integrationTestRuntime configuration contains the dependencies that are required to compile/run our unit tests.
configurations {
integrationTestCompile.extendsFrom testCompile
integrationTestRuntime.extendsFrom testRuntime
}
task integrationTest(type: Test) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
// Gradle skips tasks whose input and output are up to date.
// To ensure that your integration tests are run every time,
// tell Gradle that the outputs of the integrationTest task should always be considered out of date.
outputs.upToDateWhen { false }
}
// Ensure that our integration tests are run before the check task and that the check task fails the build if there are failing integration tests.
// Ensure that our unit tests are run before our integration tests. This guarantees that our unit tests are run even if our integration tests fails.
check.dependsOn integrationTest
integrationTest.mustRunAfter test
// Ensure that the HTML reports of unit and integration tests are created to different report
// build/reports/integrationTest directory contains the HTML report that contains the test results of our integration tests.
tasks.withType(Test) {
reports.html.destination = file("${reporting.baseDir}/${name}")
}
def cucumberVersion = "1.2.4"
dependencies {
integrationTestCompile(
'info.cukes:cucumber-core:' + cucumberVersion,
'info.cukes:cucumber-Java:' + cucumberVersion,
'info.cukes:cucumber-Java:' + cucumberVersion,
'info.cukes:cucumber-junit:' + cucumberVersion,
'info.cukes:cucumber-spring:' + cucumberVersion,
'org.springframework:spring-beans:4.2.5.RELEASE'
)
integrationTestRuntime(
'org.springframework:spring-context:4.2.5.RELEASE',
'org.springframework:spring-test:4.2.5.RELEASE',
'org.springframework:spring-tx:4.2.5.RELEASE'
)
}
vous pouvez lire le document officiel.