wake-up-neo.com

Tests laufen nicht durch Maven?

Wenn ich meinen Test in Maven durchführe, bekomme ich folgendes:

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

Meine Testklasse, JsonReaderTest.class, befindet sich in src/test/Java und befolgt soweit ich weiß von maven-surefire-plugin die korrekte Namenskonvention.

Tests laufen gut, wenn sie außerhalb von Maven ausgeführt werden.

Ich habe dieses Plugin in meinem Pom enthalten:

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

und das in meinen Abhängigkeiten:

<!-- 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>

und meine Testklasse:

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();
    }
}

Als ich versuchte, dieses Problem zu googeln, schien es das einzige, was falsch sein könnte, die Namenskonvention (die Klasse musste mit enden oder mit dem Test beginnen, ich habe beide ohne Änderung getestet) und die Testklasse sollte in den entsprechenden Ordner abgelegt werden .

Wenn ich laufe: mvn -Dtest = JsonReaderTest test

Ich bekomme folgendes:

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

Die JsonReaderTest.class wird auch innerhalb von Ziel-/Testklassen korrekt generiert

Was könnte der Täter hier sein?

5
Ava

Wenn Sie das Maven Surefire-Plugin und JUnit 5 zusammen verwenden, müssen Sie einige Anpassungen vornehmen ...

Von den Dokumenten :

Das JUnit-Team hat einen sehr einfachen Anbieter für Maven Surefire entwickelt, mit dem Sie JUnit 4- und JUnit-Jupiter-Tests über mvn test ausführen können. Die Datei pom.xml im Projekt junit5-maven-consumer demonstriert die Verwendung und kann als Ausgangspunkt dienen.

Aufgrund eines Speicherverlusts in Surefire 2.20 funktioniert der Surefire-Anbieter für Junit-Plattformen derzeit nur mit 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

Ich hatte das gleiche Problem. Alle Testklassen waren private Pakete und JUnit 5 konnte sie nicht sehen. Die Lösung bestand darin, diese Abhängigkeit zur POM-Datei hinzuzufügen:

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

die folgende Pom-Konfiguration hat für mich funktioniert:

<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>
...

das Plugin-Teil wie oben angegeben

0
amazia