Maven not running Spring Boot tests

66,227

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.

Share:
66,227
Kingamere
Author by

Kingamere

Updated on July 09, 2022

Comments

  • Kingamere
    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
    B--rian over 6 years
    Important statement about the naming scheme for test-driven programming, indeed!
  • Ev.Rei.
    Ev.Rei. over 6 years
    Works! I had same problem and after renaming to "...Test" Maven begins to execute my tests.
  • AlexO
    AlexO about 3 years
    This is necessary if you're using JUnit 4 with the latest Spring Boot version, see: baeldung.com/spring-boot-testing#1-junit-4
  • sampathlk
    sampathlk over 2 years
    You saved my day. This dependency is required for the latest spring boot applications.
  • Adam Mudianto
    Adam Mudianto over 2 years
    this sollutions is work if you are using org.junit.Test