L'exécution de spock tests unitaires avec Maven
Sur un projet précédent, j'ai utilisé le Spock framework de tests unitaires, test mon code Java. J'ai trouvé cela vraiment productif, donc je suis en train d'ajouter Spock tests pour mon projet actuel, qui utilise Maven comme outil de construction (Le précédent projet Gradle). Alors que je peux obtenir Maven pour compiler mon Spock tests (à l'aide de groovy-eclipse-compiler
), je n'arrive pas à obtenir de Maven pour exécuter les tests.
J'ai fait un exemple simple pour montrer mon problème avec les 2 fichiers:
pom.xml
src/test/java/ASpec.groovy
Contenu de pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group</groupId>
<artifactId>my-artifact</artifactId>
<version>0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.0.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>0.7-groovy-2.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerId>groovy-eclipse-compiler</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>2.8.0-01</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<version>2.1.8-01</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
Contenu de ASpec.groovy
:
import spock.lang.Specification
class ASpec extends Specification {
def "Test A"(){
//Always fail
expect: false
}
}
Quand j'execute mvn clean test
(ou mvn clean install
) je m'attends à ce que mon seul appareil de test à exécuter et ne parviennent pas. Alors que la compilation Maven ne pas l'exécuter. Ce que quelqu'un sais comment faire pour exécuter un Spock de test de l'unité de Maven (ou si c'est possible?)
(Je n'ai pas mis mon test dans un paquet pour garder l'exemple simple. Aussi, j'ai mis mon code groovy dans src/test/java pour éviter la configuration de l'exemple, pour ramasser les fichiers source à partir d'un autre répertoire, de nouveau de rester sur un exemple aussi simple que possible.)
Vous devez vous connecter pour publier un commentaire.
Maven Infaillible trouve les classes de test par leur nom. Changer le nom de la classe à
ATest
, ou reconfigurer le nom du modèle utilisé par Infaillible. Le POM pour la spock-exemple projet montre comment faire le dernier.**/*Spec.java
œuvres et**/*Spec.groovy
ne l'est pas?**/*Spec.class
Cette réponse est purement complémentaire à @PeterNiederwieser de réponse. Il mentionne qu'il est possible de configurer le nom du modèle utilisé par Infaillible. Voici un exemple de ce qui a fonctionné pour moi:
Source
Comme je le mentionne dans les commentaires, je ne suis pas sûr pourquoi
**/*Spec.groovy
ne fonctionne pas, mais je suis heureux d'être en mesure d'utiliser la normale Spock convention ici.**/Test*.java
", "**/*Test.java
", et "**/*TestCase.java
", par la plugin Surefire de documentation.**/*Spec.java
même quand mon spécification des extensions de fichiers sont.groovy
J'ai eu la même exigence d'ajouter Spock à mon java web app.
J'ai essayé Peters, mais il ne fonctionne pas pour moi.
gmavenplus-plugin en quelque sorte (aucune idée) remplacé mon goyave dépendance avec un très vieux google lib et mon Printemps application cassé qui se plaignent d'un inexistante méthode.
Après, littéralement, peut-être 2 ou 3 douzaine de tentatives, j'ai finalement été en mesure d'intégrer mon Spock tests Unitaires et tests d'Intégration et surtout d'isoler la compilation de l'Spock groovy classes de mon Java/Junit Spring/Hibernate application.
Bien sûr, si j'avais gradle il aurait résolu le problème...mais c'est un projet de l'héritage et donc je n'avais pas le choix.
Ci-dessous sont les plugins que j'ai ajouté.
Veuillez noter que le Spock tests unitaires fin avec Spec.
Le Spock tests d'intégration à la fin avec lui (mais plus que probablement, devrait être SpecIT).
J'ai mis mon Spock tests sous src/test/groovy.
Et voici mes dépendances:
Et juste pour que vous le savez, ma POM avais absolument pas explicite plugins À TOUS. J'ai donc eu une très simplement POM pour mon projet. Donc, il devrait travail pour vous.
C'est une Java 1.7 projet.
...et enfin, juste pour vous donner une confiance que ce n'est pas une poubelle, post, j'ai fait plusieurs tests afin de s'assurer que le ci-dessus a travaillé:
Construire la GUERRE sans les tests, le déploiement et le test de fumée localement
mvn clean install-DskipTests -Dmaven.test.skip=true
Faire un test de compiler et de voir si le Groovy tests Unitaires compilé ainsi
mvn -X propre test-compile
Faire une installation propre sans le test d'Intégration (je l'ai fait en sorte que ça n'était pas pour ce test) et de voir si le Groovy unité d'exécuter ces tests
mvn clean install-DskipITs
Il suffit d'exécuter le test d'intégration
mvn failsafe:integration-test
J'aurais aimé inclure des captures d'écran de ce qui précède que la preuve, mais elle aurait dû être censuré...Alors, j'espère sincèrement que cela vous aide, comme j'allais le mental essaie de le faire fonctionner...Maven est un vaste sujet. Bonne chance :=)