Tests not running through Maven?
Solution 1
Using the Maven Surefire plugin and JUnit 5 together requires some tweaking ...
From the docs:
The JUnit team has developed a very basic provider for Maven Surefire that lets you run JUnit 4 and JUnit Jupiter tests via mvn test. The pom.xml file in the junit5-maven-consumer project demonstrates how to use it and can serve as a starting point.
Due to a memory leak in Surefire 2.20, the junit-platform-surefire-provider currently only works with 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>
...
Solution 2
This plugin worked for me:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>3.0.0-M3</version>
</dependency>
</dependencies>
</plugin>
Taken from https://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html
Solution 3
the following pom configuration worked for me:
<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>
...
the plugin part as @glytching stated above
Solution 4
I was having the same problem. All the test classes were package private and JUnit 5 couldn't see them. The solution was to add this dependency to the pom file:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
Related videos on Youtube
Ava
Hi there, stranger! I have an AP degree in Computer Science, and currently I am studying in order to call myself a Software Engineer specializing in AR/VR applications. At this time, I'm an intern at a company called AquaGlobe, in which I am working on making an extensive application for HoloLens, that can also be connected to a smartphone. I lack the confidence to assume I know the answer to your question, so you will most likely just finding me asking questions here. Lots and lots of questions.
Updated on July 09, 2022Comments
-
Ava almost 2 years
When I run my test in Maven I get this:
[INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] [INFO] Results: [INFO] [INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
My test class, JsonReaderTest.class, is placed in src/test/java and follows the correct name convention as far as I know from maven-surefire-plugin.
Tests run fine when run outside of Maven.
I have this plugin included in my pom:
<!-- Executes tests --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> </plugin>
and this in my dependencies:
<!-- 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>
and my test class:
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(); } }
When I tried googling this problem, it seemed the only thing that could be wrong would be naming convention (class had to end with or start with test, I tested both with no change) and that the test class should be put into the appropriate folder.
When I run: mvn -Dtest=JsonReaderTest test
I get following:
Failed to execute goal org.apache.maven.plugins:maven-surefire- plugin:2.20.1:test (default-test) on project optaplanner: No tests were executed!
The JsonReaderTest.class is also correctly generated inside target/test-classes
What could be the culprit here?
-
skadya over 6 yearswhich version of junit you are trying to use? From you test class, it appears to me you want to use junit 5 but from your maven configuration seems for junit 4.
-
P.An over 6 yearsI can't see 'package' line in your test class? Is your test class in default package?
-
SilverNak over 6 yearsI tried to recreate your example. I get this error:
initializationError(package.maven.MyTest): The class package.maven.MyTest is not public.
Can you try adding public modifier to your class?
-
-
Harry King over 3 yearsFrom the above docs link, this is no longer recommended: "The junit-platform-surefire-provider, which was originally developed by the JUnit team, was deprecated in JUnit Platform 1.3 and discontinued in 1.4. Please use Maven Surefire’s native support instead."
-
ahmednabil88 about 3 yearsNice!, plus
junit-jupiter-engine
is enough -
notacorn about 3 yearsthis, except without test scoped dependencies, fixed my problem
-
GeertPt over 2 yearsThis has changed between JUnit 4 and Junit 5: test classes, test methods, and lifecycle methods are no longer required to be public, but they must not be private. So you can just omit the 'public' modifier, so they use the default visibility (package local).
-
GeertPt over 2 yearsNo it's not. If you do not specify either public or private, it's considered package-local, and JUnit 5 will still find your tests. See e.g: github.com/junit-team/junit5-samples/blob/r5.5.1/…