# Maven - keine Durchführung von Tests



## Hein_nieH (5. Jan 2021)

Hallo,

ich suche nun schon seit Stunden nach der Ursache für folgendes Problem.
Ich habe ein Programm (Maven- , welches auch Testfälle enthält.
In Eclipse kann ich die Tests auch ohne Probleme direkt durchführen (run - JUnit).

Sofern ich jedoch das MavenScript starte werden keine Tests durchgeführt.😬
hier habe ich schon alles erdenkliche versucht und bin zu keiner Lösung gekommen.
Kann jemand mir einen Tip geben, um die Ursache zu finden. 🙄

In der Anlage habe ich ein paar Screenshots vom Projekt erstellt.

Gruss Hein_nieH

Hier die pom.xml

```
<project xmlns="[URL]http://maven.apache.org/POM/4.0.0[/URL]" xmlns:xsi="[URL]http://www.w3.org/2001/XMLSchema-instance[/URL]" xsi:schemaLocation="[URL]http://maven.apache.org/POM/4.0.0[/URL] [URL]http://maven.apache.org/xsd/maven-4.0.0.xsd[/URL]">
  <modelVersion>4.0.0</modelVersion>
  <groupId>VPN_Rebuild</groupId>
  <artifactId>VPN_Rebuild</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>VPN_Rebuild name</name>
  <description>VPN_Rebuild descr</description>

  <properties>
        <project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
        <project.reporting.outputEncoding>Cp1252</project.reporting.outputEncoding>
        <java.version>8</java.version>
   </properties>
 
   <!-- Anpassung des Standard-Build-Prozesses -->
    <build>
        <!-- Festlegen ressourcen -->
        <resources>
              <resource>
                <directory>src</directory>
                <includes></includes>
                <excludes>
                      <exclude>**/*.java</exclude>
                </excludes>
              </resource>
        </resources>
  
        <!-- Anpassung des Build prozesses -->
        <plugins>
            <!-- Konfiguration des surefire-Plugins anpassen -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M1</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                    <formats>
                        <format>xml</format>
                        <format>html</format>
                    </formats>
                </configuration>
            </plugin>

            <!-- Konfiguration des maven-compiler-Plugins anpassen -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <release>${java.version}</release>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                    <debug>true</debug>
                    <debuglevel>lines,vars,source</debuglevel>
                    <parameters>true</parameters>
                </configuration>
            </plugin>

            <!-- Konfiguration des maven-jar-Plugins anpassen -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <!-- Verändert / Erweitert das default-Manifest -->
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>main.java.main.MainClass</mainClass>
                        </manifest>
                    </archive>
                    <!-- Name der jar-Datei aendern -->
                    <finalName>VPM_Rebuild__Git_Test</finalName>
                    <!--  Ausgabeort für jar-Datei aendern -->
                      <outputDirectory>C:\Users\${user.name}\Documents\Programmierung_Java\EXPORT</outputDirectory>
                </configuration>
            </plugin>

            <!-- Konfiguration des jacoco-plugins anpassen -->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.5</version>
                <configuration>
                    <append>false</append>
                </configuration>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!--
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <configLocation>google_checks.xml</configLocation>
                    <encoding>Cp1252</encoding>
                    <consoleOutput>true</consoleOutput>
                    <failsOnError>true</failsOnError>
                    <linkXRef>false</linkXRef>
                </configuration>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>package</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            -->

        </plugins>
    </build>
 
    <!-- Einbindung externer Bibliotheken -->
    <dependencies>
        <!-- junit jupiter -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.7.0</version>
            <scope>test</scope>
        </dependency>
        <!-- junit 4.12.0 nutzen, selbe version wie eclipse -->
        <!--
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        -->
        <!-- jfree jfreechart -->
        <dependency>
            <groupId>org.jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.19</version>
        </dependency>
        <!-- jfree jcommon -->
        <dependency>
            <groupId>org.jfree</groupId>
            <artifactId>jcommon</artifactId>
            <version>1.0.23</version>
        </dependency>
    </dependencies>
</project>
```


----------



## LimDul (5. Jan 2021)

Wie schon mal geschrieben - deine Struktur ist murks.

Die Verzeichnisstruktur sollte so aussehen:

```
src/main/java/package
src/main/resources
src/test/java/package
src/test/resources
```

Das heißt, deine MainClass müsste main.MainClass heißen und nicht main.java.main.MainClass. Das deutet darauf hin, dass das ganze Setup vermurkst ist.

In Eclipse sieht es auf jeden Fall korrekt aus. 

Schmeiß auf jeden Fall mal den ganzen resources Block raus.

Außerdem nutzt in Eclipse Junit4-Annotation (BeforeClass), in der Pom ist aber Junit 5 eingebunden. Das sieht auch strange aus.


----------



## Hein_nieH (5. Jan 2021)

Hallo,

ich habe zuvor in Eclipse ein umfangreiches Refactoring durchgeführt, um den Code an die Maven-Vorgaben anzupassen, darum sieht es jetzt in Eclipse korrekt aus.
Hatte auch erst gedacht, dass es an der unkorrekten struktur liegt.

Gruss Hein_nieH


----------



## LimDul (5. Jan 2021)

Dann probier mal alles auf eine einheitliche Junit-Version umzustellen (ich empfehle Junit 5)


----------



## mrBrown (5. Jan 2021)

Zum Problem: Test-Klassen sollten auf "Test" enden, nicht auf "Test-02".

Zum Projekt: die Änderungen, die du an der pom vorgenommen hast, sind im wesentlichen großer Unsinn. Die pom, die ich gepostet hatte, war fertig und funktionierte so, da musste nichts dran geändert werden 

Encoding solltest du einfach grundsätzlich immer auf UTF-8 lassen, es gibt wirklich keinen Grund, heutzutage im Java-Bereich irgendwas anderes zu nutzen.

resources brauchst du nicht extra zu konfigurieren, den Teil solltest du einfach weg lassen. So wie du es konfiguriert hast, führt das nur zu Fehlern, zB liegen alle Resourcen dann im *Package* [/icode]main.resources[/icode], das willst du ganz sicher nicht.

outputDirectory für die Jar zu setzen ist auch Unsinn, wenn du da nichts konfigurierst liegt die einfach im Target-Ordner, da wo sie jeder und jedes Toll erwartet – und nicht in irgendwelchen Ordnern, die uU nicht mal existieren.



LimDul hat gesagt.:


> Dann probier mal alles auf eine einheitliche Junit-Version umzustellen (ich empfehle Junit 5)


Ist es sogar schon, die Junit-4 Dependency ist auskommentiert (hab die Formatierung grad gefixt, jetzt erkennt man das auch).


----------



## LimDul (5. Jan 2021)

mrBrown hat gesagt.:


> Ist es sogar schon, die Junit-4 Dependency ist auskommentiert (hab die Formatierung grad gefixt, jetzt erkennt man das auch).


Ja, aber der Test verwendet @BeforeClass - was Junit 4 ist


----------



## mrBrown (5. Jan 2021)

Oh, ich seh grad: in der pom muss `junit-jupiter-api` zu `junit-jupiter` geändert werden, Sorry!
Junit 4 Tests sollten aber trotzdem gehen.



LimDul hat gesagt.:


> Ja, aber der Test verwendet @BeforeClass - was Junit 4 ist


Ist über die Vintage-Engine möglich, Junit 4 Tests laufen mit der pom oben.


----------



## LimDul (5. Jan 2021)

__





						Maven Surefire Plugin – Inclusions and Exclusions of Tests
					





					maven.apache.org
				





> By default, the Surefire Plugin will automatically include all test classes with the following wildcard patterns:
> 
> 
> "**/Test*.java" - includes all of its subdirectories and all Java filenames that start with "Test".
> ...


Da fällt deine Klasse leider nicht rein. Deswegen ist es sinnvoll sich an Standards zu halten


----------



## Hein_nieH (6. Jan 2021)

Hallo,

ich habe eine Lösung gefunden , deren Hintergrund für mich etwa seltsam ist.
Bei mir liegt die Ursache im Dateinamen.
Wenn der Dateiname der Testklasse "xyzTest.java" lautet, wurde der Test ignoriert.
Wenn der Dateiname jedoch mit dem Wort "Test" beginnt, dann hat es funktioniert, also "Testxyz.java" oder "Test_xyz.java".
Die Logik erschliesst sich für mich insofern nicht, da es in keiner Literatur hierzu einen Hinweis gab.

... habe ganz schön lange gebraucht, um auf die Lösung zu kommen  

Gruss Hein_nieH


----------



## LimDul (6. Jan 2021)

Hein_nieH hat gesagt.:


> Hallo,
> 
> ich habe eine Lösung gefunden , deren Hintergrund für mich etwa seltsam ist.
> Bei mir liegt die Ursache im Dateinamen.
> ...


Schau mal einen Beitrag über deinen. Da steht exakt das inkl. Link zur Dokumentation

Hier steht auch was: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven-filter-test-class-names


----------



## LimDul (6. Jan 2021)

Nachtrag: Was meinst du mit Literatur? Bei sowas *nie* sich auf Bücher verlassen und *immer* die Dokumentation der verwendeten Tools (Hier: Maven Surefire, JUnit) lesen.


----------



## mrBrown (6. Jan 2021)

Hein_nieH hat gesagt.:


> Hallo,
> 
> ich habe eine Lösung gefunden , deren Hintergrund für mich etwa seltsam ist.
> Bei mir liegt die Ursache im Dateinamen.
> ...


Das funktioniert auch mit xyzTest.java, zumindest mit der pom.xml von oben. Deine Klasse hieß endete allerdings nicht auf Test, deshalb funktionierte das nicht.


----------



## Hein_nieH (6. Jan 2021)

Hallo,

ich habe noch einmal die Sache geprüft.
Jetzt funktioniert auch xyzTest.java.

Wichtig ist nur, dass der Dateinamen den Teilstring "Test" enthält, egal ob am Anfang oder am Ende.
Mein ursprünglicher Fehler war, dass meine Testklassen nicht den String "Test" enthielten.

Gruss Hein_nieH


----------

