web-dev-qa-db-fra.com

Les tests ne passent pas par Maven?

Lorsque je lance mon test dans Maven, je reçois ceci:

[INFO] -------------------------------------------------------    
[INFO]  T E S T S     
[INFO] -------------------------------------------------------   
[INFO]   
[INFO] Results:  
[INFO]   
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

Ma classe de test, JsonReaderTest.class, est placée dans src/test/Java et suit la convention de nom correcte pour autant que je sache de maven-surefire-plugin.

Les tests se déroulent bien en dehors de Maven.

J'ai ce plugin inclus dans mon pom:

<!-- Executes tests -->
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
</plugin>

et ceci dans mes dépendances:

<!-- Test -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.0.0</version>
</dependency>

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.0.0</version>
</dependency>

et ma classe de test:

package org.avalin.optaplanner.test.Java;

import org.avalin.optaplanner.json.JsonReader;
import org.junit.jupiter.api.*;

import Java.io.FileNotFoundException;
import Java.nio.file.Paths;

import static org.junit.jupiter.api.Assertions.*;

public class JsonReaderTest
{
    @Test
    @DisplayName("Test: No such file at designated path")
    void testloadFromJsonTest() throws Exception
    {
        Throwable exception = assertThrows(FileNotFoundException.class, 
        ()-> JsonReader.loadFromJson(".json"));
        assertEquals(".json (No such file or directory)", 
        exception.getMessage());
    }

    @Test
    @DisplayName("Test: Load Shifts from JSON (String instead of number)")
    void testLoadShiftsFromJson3()
    {
        Throwable exception = assertThrows(NumberFormatException.class, ()-> JsonReader.loadFromJson(Paths.get("src/main/resources/org/avalin/optaplanner/json/faultyShift-2.json").toAbsolutePath().toString()));
        assertEquals("\nOne or more of your \"shift\" elements has a number format exception.\n" +
            "Check for errors in your JSON-properties.\n" +
            "(Did you insert a string instead of a number in id?)", 
        exception.getMessage());
    }

    @Test
    @DisplayName("Test: JSON is correctly loaded")
    void testJsonIsLoaded()
    {
        assertFalse(JsonReader.jsonIsLoaded());
    }

    @AfterEach
    void cleanJsonReader()
    {
        JsonReader.cleanJsonReader();
    }
}

Quand j'ai essayé de googler ce problème, il m'a semblé que la seule chose qui pouvait être erronée serait la convention de nommage (la classe devait se terminer ou commencer par test, j'ai testé les deux sans changement) et que la classe de test devait être placée dans le dossier approprié. .

Quand je lance: mvn -Dtest = JsonReaderTest test

Je reçois:

Failed to execute goal org.Apache.maven.plugins:maven-surefire-
plugin:2.20.1:test (default-test) on project optaplanner: No tests were 
executed!  

Le JsonReaderTest.class est également généré correctement dans target/test-classes

Quel pourrait être le coupable ici?

5
Ava

L'utilisation conjointe du plugin Maven Surefire et de JUnit 5 nécessite quelques modifications ...

De les docs :

L’équipe JUnit a mis au point un fournisseur très basique pour Maven Surefire qui vous permet d’exécuter des tests JUnit 4 et JUnit Jupiter via mvn test. Le fichier pom.xml du projet junit5-maven-consumer montre comment l'utiliser et peut servir de point de départ.

En raison d'une fuite de mémoire dans Surefire 2.20, le fournisseur junit-platform-surefire ne fonctionne actuellement qu'avec Surefire 2.19.1.

...
<build>
    <plugins>
        ...
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.0.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
...
12
glytching

J'avais le même problème. Toutes les classes de test étaient des paquets privés et JUnit 5 ne pouvait pas les voir. La solution consistait à ajouter cette dépendance au fichier pom:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.3.2</version>
    <scope>test</scope>
</dependency>
0
David DeMar

la configuration de pom suivante a fonctionné pour moi:

<dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.4.0</version>
      <scope>test</scope>
  </dependency>
  <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.4.0</version>
      <scope>test</scope>
  </dependency>
  <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-launcher</artifactId>
      <version>1.4.0</version>
      <scope>test</scope>
  </dependency>
....
<plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <dependencies>
            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-surefire-provider</artifactId>
                <version>1.0.0</version>
            </dependency>
        </dependencies>
    </plugin>
...

la partie plugin comme @glytching indiquée ci-dessus

0
amazia