Maven not running Spring Boot tests
Solution 1
The code in the class you named TestController
isn't a controller, it's a test, but the convention says that it's a controller (perhaps used in testing). By default, Surefire will be looking for tests matching *Test
; rename the class to ControllerTest
.
Solution 2
Use the below maven jar. It fixed my issue.
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
Solution 3
Even if this is not recommended (as not standard), you can configure the maven surefire plugin too, as follows:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
Edit: Wildcard added before /Test*.java
Solution 4
try checking if you are using the correct package for @Test annotation. In Spring Boot 2.3.6 is org.junit.jupiter.api.Test
Solution 5
Another reason this may be happening is to have declared another surefire plugin in your pom. In my case I migrated an app to spring boot and left this in the pom.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>false</testFailureIgnore>
<includes>
<include>**/*Test*.java</include>
</includes>
</configuration>
<executions>
<execution>
<phase>clean</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
Spring boot test were executed after remove this part from the pom.
Kingamere
Updated on July 09, 2022Comments
-
Kingamere almost 2 years
I have a rest Spring Boot REST API that I want to test. I can run the tests manually in Eclipse (without maven and by running the application as JUnit test) and it runs fine and displays the results, but
mvn test
does not "work" as you will find out below.Here is my POM file:
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
<groupId>org.demo</groupId> <artifactId>rest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>UserRegistrationServices</name> <description>RESTful API</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.5.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!-- Junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- Spring dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- To deploy to external servlet container --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- For Spring Boot testing --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.jayway.restassured</groupId> <artifactId>rest-assured</artifactId> <version>2.4.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.jayway.restassured</groupId> <artifactId>json-schema-validator</artifactId> <version>2.4.1</version> <scope>test</scope> </dependency> <!-- For returning objects as JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.5.4</version><!--$NO-MVN-MAN-VER$ --> </dependency> <dependency> <groupId>com.fasterxml</groupId> <artifactId>jackson-xml-databind</artifactId> <version>0.6.2</version> </dependency> <!-- To decode Base64 data --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> </dependencies> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> </pluginRepositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
This is the result of
mvn test
:[INFO] Scanning for projects... [INFO] [INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building UserRegistrationServices 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ rest --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ rest --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 9 source files to C:\Users\pmandayam\git\UserRegistrationServices\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ rest --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\Users\pmandayam\git\UserRegistrationServices\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ rest --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to C:\Users\pmandayam\git\UserRegistrationServices\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.17:test (default-test) @ rest --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.768 s [INFO] Finished at: 2015-07-28T12:07:41-05:00 [INFO] Final Memory: 24M/212M [INFO] ------------------------------------------------------------------------
Here is a segment of my TestController.java class in src/test/java:
@Test public void f_findByUsername() { // Finding user with username 'user1username' given().auth().basic("User1username", "Testpassword").when().get( "http://localhost:8080/users/get/ByUsername?username=User1username") .then().assertThat().body("username", is("User1username")); }
At the top of the TestController class I have these annotations:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration /* Tells the embedded Tomcat server to start on a random, open port */ @IntegrationTest("server.port:0") @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestController {....}
I'm not sure whats wrong. I don't have the surefire plugin but its looking for that it seems.
-
B--rian over 6 yearsImportant statement about the naming scheme for test-driven programming, indeed!
-
Ev.Rei. over 6 yearsWorks! I had same problem and after renaming to "...Test" Maven begins to execute my tests.
-
AlexO about 3 yearsThis is necessary if you're using JUnit 4 with the latest Spring Boot version, see: baeldung.com/spring-boot-testing#1-junit-4
-
sampathlk over 2 yearsYou saved my day. This dependency is required for the latest spring boot applications.
-
Adam Mudianto over 2 yearsthis sollutions is work if you are using
org.junit.Test