Question

Pour une raison quelconque, je ne peux pas Maven 2 plug-in Surefire pour exécuter la classe de test JUnit 4.

public class SimpleTest {
  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

Cependant, si je change cette classe pour être JUnit-3 comme, par exemple

public class SimpleTest extends junit.framework.TestCase {
  public void testBar() {
     System.out.println("bar");
  }

  @org.junit.Test
  public void simple() {
     System.out.println("foo");
  }
}

il est exécuté. Voici ce que je l'ai fait:

Autres conseils

Le plugin Surefire chiffres sur quel fournisseur JUnit doit être utilisé en fonction de la classpath. S'il existe plusieurs versions de JUnit sur le classpath, vous pouvez corriger le classpath avoir qu'une seule version de JUnit sur le chemin de classe (comme discuté ci-dessus), ou vous pouvez spécifier explicitement quel fournisseur que vous souhaitez utiliser. Par exemple, en spécifiant les éléments suivants dans votre (parent) forces POM utilisant le nouveau fournisseur (par exemple, "surefire-junit47"):

[...]
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.8</version>
  <dependencies>
    <!-- Force using the latest JUnit 47 provider -->
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-junit47</artifactId>
      <version>2.8</version>
    </dependency>
  </dependencies>
[...]

Notez cependant que Surefire 2.7 a changé la façon dont il est la détermination des classes de tests unitaires sont exécutés. Le nouveau comportement lors de l'utilisation Surefire 2.7 (ou version ultérieure) avec JUnit 4 est que tout test sans annotation @Test est automatiquement ignoré. Cela peut être grand si vous avez juste JUnit 4 tests unitaires, mais si vous avez une combinaison de JUnit 3 et 4 tests unitaires, en utilisant le fournisseur « surefire-junit47 » ne fonctionnera pas correctement. Dans de tels cas, il est préférable de choisir explicitement le fournisseur « surefire-junit4 »:

[...]
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.8</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <!-- Use the older JUnit 4 provider -->
      <artifactId>surefire-junit4</artifactId>
      <version>2.8</version>
    </dependency>
  </dependencies>
[...]

Je ne sais pas ce que vous entendez par « ne peut pas exécuter », mais est-il utile de définir explicitement les includes utilisé par le maven-surefire-plugin?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.4.3</version>
    <configuration>
        <includes>
            <include>**/*Test.java</include>
        </includes>
    </configuration>
</plugin>

En outre, ne maven en cours d'exécution avec le drapeau de -X fournir toute information utile?

Une plus cause possible peut être ce bug (fermé avec "Will not fix"): https://issues.apache.org/jira/browse/SUREFIRE-587

Résumé court:. Les tests s'étendant TestCase (mais pas en utilisant les annotations) ne seront pas repris si leur nom ne se termine pas avec « Test »

Pour une pauvre âme là-bas qui se demande pourquoi Maven ne capte pas les tests JUnit.

Je possède JUnit et TestNG que dependecies. Mais je veux que mes failsafe pour exécuter des tests fonctionnels en utilisant TestNG et infaillible pour exécuter mes tests unitaires JUnit.

Cependant, je trouve que surefire a tenté d'exécuter mes tests unitaires à l'aide TestNG et n'a rien trouvé à courir. Mes tests JUnit ont été ignorés.

Plus tard, je suis tombé sur cette question Maven et configuré surefire pour fonctionner uniquement " JUnit » tests comme celui-ci:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <properties>
      <property>
        <name>junit</name>
        <value>true</value>
      </property>
    </properties>
  </configuration>
</plugin>

Espérons que cela aide quelqu'un.

Pour le bénéfice des Googlers, quand j'avais cette question, il est parce que j'avais inclus une dépendance PowerMock qui a tiré dans TestNG, ce qui ne [TestNG] des tests à détecter par SureFire.

je l'm2eclipse onglet « hiérarchie des dépendances » de l'éditeur de POM pour trouver la dépendance et clic droit pour générer une exclusion (voir XML ci-dessous).

Pour être complet (et pour ceux qui n'utilisent m2eclipse) voici le code XML qui exclut la dépendance - je ne suis tombé sur cette caractéristique de Maven en voyant ces balises générées automatiquement:

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-mockito-release-full</artifactId>
  <version>1.4.9</version>
  <classifier>full</classifier>
  <exclusions>
    <exclusion>
      <artifactId>powermock-module-testng</artifactId>
      <groupId>org.powermock</groupId>
    </exclusion>
  </exclusions>
</dependency>

(Dans mon cas, à l'exclusion « powermock-module testng » était suffisante, mais vous pouvez exclure directement TestNG si elle vient de quelque part d'autre.)

La vérification que vous avez fait sont bons, en particulier la vérification que le vous utilisez la version 2.3+ du plugin Surefire (par défaut, vous obtiendrez la version 2.1 avec Maven 2.4.3

Un petit changement m'a aidé Funnily !!!

J'ai changé le nom de la classe de MyClassTest à TestMyClass, J'ai eu cette idée après veryfing mon pom.xml parent contient la ligne ci-dessous

<test.include.pattern> **/Test*.java <test.include.pattern/>

1.) Suivant Inclure dans le plugin Surefire pom.xml

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
</configuration>
</plugin>

2.) Par défaut plug-in surefire classe Test ramasse de l'emballage: - src / test / java /....

Alors, allez construire le chemin et inclure le dossier de test dans classpath comme ci-dessous:

entrer la description d'image ici

.

3) Aller à -> Exécuter en tant que -> Test de Maven

[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.081 
s - in com.bnym.dcm.api.controller.AccountControllerTest
[INFO] Running com.bnym.dcm.api.controller.DCMApiControllerTest
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s - 
in com.bnym.dcm.api.controller.DCMApiControllerTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ----------------------------------------------------------------------
--
[INFO] BUILD SUCCESS

eu un problème similaire lorsque vous essayez d'exécuter des tests d'intégration. J'ai eu une ancienne version du plugin qui surefire qu'il essayait de courir TestNG et non jUnit. J'ai changé le numéro de version dans la pom 2,20 et cela a fonctionné.

Avez-vous configuré votre maven-plugin décompiler pour le niveau du compilateur correct, comme:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>1.5</source>
    <target>1.5</target>
  </configuration>
</plugin>

Dans le cas contraire maven aura des problèmes avec annotations

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top