J'ai un programme maven, il se compile très bien. Quand je l'exécute, mvn test
il n'exécute aucun test (sous l'en-tête TESTs dit There are no tests to run.
).
J'ai recréé ce problème avec une configuration super simple que j'inclurai ci-dessous ainsi que la sortie lors de l'exécution avec -X
.
Les tests unitaires fonctionnent bien depuis eclipse (à la fois avec son package junit par défaut et quand j'inclus à la place le junit.jar téléchargé par maven). Aussi mvntest-compile
crée correctement la classe sous test-classes. Je l'exécute sur OSX 10.6.7 avec Maven 3.0.2 et java 1.6.0_24.
Voici la structure du répertoire:
/my_program/pom.xml
/my_program/src/main/java/ClassUnderTest.java
/my_program/src/test/java/ClassUnderTestTests.java
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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_program</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>My Program</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
ClassUnderTest.java:
public class ClassUnderTest {
public int functionUnderTest(int n) {
return n;
}
}
ClassUnderTestTests.java:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class ClassUnderTestTests {
private ClassUnderTest o;
@Before
public void setUp() {
o = new ClassUnderTest();
}
@Test
public void testFunctionUnderTest_testCase1() {
Assert.assertEquals(1, o.functionUnderTest(1));
}
@Test
public void testFunctionUnderTest_testCase2() {
Assert.assertEquals(2, o.functionUnderTest(2));
}
}
Fin du test mvn -X:
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.7.1, parent: sun.misc.Launcher$AppClassLoader@5224ee]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test' with basic configurator -->
[DEBUG] (s) basedir = /Users/aaron/Programs/my_program
[DEBUG] (s) childDelegation = false
[DEBUG] (s) classesDirectory = /Users/aaron/Programs/my_program/target/classes
[DEBUG] (s) disableXmlReport = false
[DEBUG] (s) enableAssertions = true
[DEBUG] (s) forkMode = once
[DEBUG] (s) junitArtifactName = junit:junit
[DEBUG] (s) localRepository = id: local
url: file:///Users/aaron/.m2/repository/
layout: none
[DEBUG] (f) parallelMavenExecution = false
[DEBUG] (s) pluginArtifactMap = {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.7.1:, org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile, org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.7.1:compile, org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.7.1:compile, org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.3:compile, org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, junit:junit=junit:junit:jar:3.8.1:compile, org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile}
[DEBUG] (s) printSummary = true
[DEBUG] (s) project = MavenProject: my_group:my_program:1.0-SNAPSHOT @ /Users/aaron/Programs/my_program/pom.xml
[DEBUG] (s) projectArtifactMap = {junit:junit=junit:junit:jar:4.8.1:test}
[DEBUG] (s) redirectTestOutputToFile = false
[DEBUG] (s) remoteRepositories = [ id: central
url: http://repo1.maven.org/maven2
layout: default
snapshots: [enabled => false, update => daily]
releases: [enabled => true, update => never]
]
[DEBUG] (s) reportFormat = brief
[DEBUG] (s) reportsDirectory = /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] (s) session = org.apache.maven.execution.MavenSession@dfbb43
[DEBUG] (s) skip = false
[DEBUG] (s) skipTests = false
[DEBUG] (s) testClassesDirectory = /Users/aaron/Programs/my_program/target/test-classes
[DEBUG] (s) testFailureIgnore = false
[DEBUG] (s) testNGArtifactName = org.testng:testng
[DEBUG] (s) testSourceDirectory = /Users/aaron/Programs/my_program/src/test/java
[DEBUG] (s) trimStackTrace = true
[DEBUG] (s) useFile = true
[DEBUG] (s) useManifestOnlyJar = true
[DEBUG] (s) workingDirectory = /Users/aaron/Programs/my_program
[DEBUG] -- end configuration --
[INFO] Surefire report directory: /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] Setting system property [user.dir]=[/Users/aaron/Programs/my_program]
[DEBUG] Setting system property [localRepository]=[/Users/aaron/.m2/repository]
[DEBUG] Setting system property [basedir]=[/Users/aaron/Programs/my_program]
[DEBUG] Using JVM: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-junit4:jar:2.7.1:test (selected for test)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:test (selected for test)
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.7.1/surefire-junit4-2.7.1.jar Scope: test
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: test
[DEBUG] Test Classpath :
[DEBUG] /Users/aaron/Programs/my_program/target/test-classes
[DEBUG] /Users/aaron/Programs/my_program/target/classes
[DEBUG] /Users/aaron/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG] org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
Forking command line: /bin/sh -c cd /Users/aaron/Programs/my_program && /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar /Users/aaron/Programs/my_program/target/surefire/surefirebooter6118081963679415631.jar /Users/aaron/Programs/my_program/target/surefire/surefire4887918564882595612tmp /Users/aaron/Programs/my_program/target/surefire/surefire9012255138269731406tmp
-------------------------------------------------------
T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.089s
[INFO] Finished at: Mon May 30 12:03:09 EDT 2011
[INFO] Final Memory: 7M/62M
[INFO] ------------------------------------------------------------------------
**/*Tests.java
s'agit d'une inclusion par défaut!J'ai également constaté que le code de test unitaire devrait être placé dans le dossier de test, il ne peut pas être reconnu comme classe de test si vous le mettez dans le dossier principal. par exemple.
Faux
Droite
la source
<scope>test<scope>
) dans lepom.xml
fichier l'ont fait pour moi.Une autre chose qui peut empêcher Maven de trouver les tests si si l'emballage du module n'est pas déclaré correctement.
Dans un cas récent, quelqu'un l'avait fait
<packaging>pom</packaging>
et mes tests n'ont jamais fonctionné. Je l'ai changé<packaging>jar</packaging>
et maintenant ça fonctionne bien.la source
package type is pom - so not running tests
- pour donner un indice aux développeurs :(MISE À JOUR:
Comme @scottyseus l'a dit dans les commentaires, à partir de Maven Surefire 2.22.0, ce qui suit est suffisant:
Lors de l'utilisation de JUnit 5, j'ai rencontré le même problème. Maven Surefire a besoin d'un plugin pour exécuter les tests JUnit 5. Ajoutez ceci à notre
pom.xml
:Source: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
la source
junit-platform-surefire-provider
.surefire-provider
ou lesjupiter-engine
artefacts. Mes tests semblent bien fonctionner sans eux, au moins. voir cette réponse .org.junit.jupiter.api.Test
plutôt que d'org.junit.Test
utiliser ce plugin ou les tests ne seront pas trouvés.Vérifiez également si votre répertoire de classes de test (par exemple src / test / java) correspond au répertoire répertorié dans la propriété
<testSourceDirectory>
dans votre pom.xml sous la<build>
propriété. Ça m'a pris du temps pour trouver ça.la source
Maven n'exécutera pas vos tests si le projet a
<packaging>pom</packaging>
Vous devez définir l'emballage sur jar (ou sur un autre type d'artefact java) pour que les tests s'exécutent:
<packaging>jar</packaging>
la source
Dans mon cas, il ajoutait le moteur junit-vintage qui le rend compatible avec l'ancienne version des tests JUnit et peut les exécuter. Comme j'utilise JUnit 5.
la source
Beaucoup de ces réponses m'ont été très utiles dans le passé, mais je voudrais ajouter un scénario supplémentaire qui m'a coûté un certain temps, car il pourrait en aider d'autres à l'avenir:
Assurez-vous que les classes et méthodes de test sont publiques.
Mon problème était que j'utilisais une fonction de génération automatique de classes / méthodes de test de mon IDE (IntelliJ) et pour une raison quelconque, il les a créées en tant que package-privé. Je trouve que c'est plus facile à manquer que ce à quoi on pourrait s'attendre.
la source
Vérifiez que (pour jUnit - 4.12 et le plugin Eclipse surefire)
la source
src/test/java
. La convention de package est pour la structure et pour permettre aux tests d'accéder aux méthodes de package privé.Découvert si vous préfixez un test avec «Résumé», il sera également ignoré par défaut.
la source
*/TestAbstractSomeClassName.java
.Je lutte avec ce problème. Dans mon cas, je n'importais pas la bonne annotation @Test .
1) Vérifiez si le @Test provient de org.junit.jupiter.api.Test (si vous utilisez Junit 5).
2) Avec Junit5 au lieu de
@RunWith(SpringRunner.class)
, utilisez@ExtendWith(SpringExtension.class)
la source
Si vous avez une application Java / Groovy partagée et que vous n'avez que des tests unitaires Groovy, alors Maven ne trouvera aucun test. Cela peut être corrigé en ajoutant un test unitaire sous src / test / java.
la source
J'ai également eu un problème similaire, après avoir découvert que la dépendance testng était à l'origine de ce problème. Après avoir supprimé la dépendance testng de pom (car je n'en ai plus besoin), cela a commencé à bien fonctionner pour moi.
la source
Si vous avez créé une
Spring Boot
application à l'aide de Spring Initializr , les tests s'exécutent parfaitement depuis Intellij Idea. Mais, si vous essayez d'exécuter des tests à partir d'une ligne de commande:Vous pourriez avoir été surpris qu'aucun test n'ait été exécuté. J'ai essayé d'ajouter
surefire plugin
sans chance. La réponse était simple:pom.xml
contenait la dépendance suivante:L'exclusion,,
junit-vintage-engine
est dédiée au maintien de la compatibilité descendante avecJUnit 4.x
. Par conséquent, les nouvelles versions de Spring Boot Initializr ne le prennent pas en charge par défaut. Après avoir supprimé l'exclusion, j'aiMaven
commencé à voir les tests du projet.la source
Si votre nom de classe de test ne suit pas la convention de dénomination standard (comme souligné par @axtavt ci-dessus), vous devez ajouter le nom de modèle / classe dans le
pom.xml
afin de Maven choisir le test -la source
devrait être
Le Maven trouve ces extrémités Test ou démarre avec Test pour s'exécuter automatiquement.
Cependant, vous pouvez utiliser
pour exécuter vos tests.
la source
Voici le code exact que j'ai dû ajouter à mon pom.xml:
Et voici mes dépendances:
la source
J'ai rencontré le même problème, il a résolu le changement ci-dessous dans pom.xml:
...
changé en:
la source
Une autre raison de ne pas exécuter les cas de test m'est arrivée - j'avais une propriété nommée "test" à des fins complètement différentes, mais elle interférait avec le plugin infaillible. Ainsi, veuillez vérifier vos POM pour:
et retirez-le.
la source
Un autre conseil (en plus des réponses précédentes):
Dans Eclipse, accédez aux propriétés de votre projet> cliquez sur
Run/Debug Settings
:Vous pouvez y ajouter (Nouveau ...) ou supprimer (Supprimer) tous les tests JU (JUnit) que vous avez dans votre projet (sous le
src/test/java
dossier ou le cours).la source
Si vous avez écrit vos tests dans JUnit 4 et ajouté des dépendances JUnit 5 au plugin surefire, vos tests ne s'exécuteront pas.
Dans ce cas, il suffit de commenter les dépendances JUnit 5 du plugin surefire:
la source
La suite a très bien fonctionné pour moi dans Junit 5
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
la source
Dans mon cas, nous migrons une application multimodule vers Spring Boot. Malheureusement, maven n'a plus exécuté tous les tests dans les modules. La dénomination des classes de test n'a pas changé, nous suivons les conventions de dénomination.
À la fin, cela a aidé, lorsque j'ai ajouté la dépendance
surefire-junit47
au pluginmaven-surefire-plugin
. Mais je ne pouvais pas expliquer pourquoi, c'était des essais et des erreurs:la source
J'exécutais des cas de test Junit-5 avec maven 3.6.2 et il montrait toujours Test run: 0
[
Les tests Junt-5 ne fonctionnent pas sous maven link ont sauvé ma journée.
la source
junitArtifactName
pourrait également être le cas si la JUnit utilisée n'est pas la norme (junit:junit
) mais par exemple ...la source
Au cas où quelqu'un aurait cherché et que je ne le résoudrais pas, j'avais une bibliothèque pour différents tests:
Lorsque j'ai installé junit, tout a fonctionné, j'espère et aide ceci:
la source
j'ai utilisé en utilisant ce code
à mon pom.xml, assurez-vous simplement que le fichier testng en particulier là-bas
la source
Un tel problème peut se produire lorsque vous utilisez le plug-in surfire 3.x.x + avec JUnit5 et que vous annotez par erreur la classe de test avec
@Test
annotation de JUnit4.Utilisez:
org.junit.jupiter.api.Test
(JUnit5) au lieu deorg.junit.Test
(Junit4)REMARQUE: cela peut être difficile à remarquer car l'EDI peut exécuter ce problème sans problème, tout comme le test JUnit4.
la source
Un autre problème facilement ignoré - Assurez-vous que le fichier de votre classe a l'extension .java
la source