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.
Maven is a great tool for project dependency and build management. It can be used for running the Junit testcases for the project.
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
.
Use the below maven jar. It fixed my issue.
<dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <scope>test</scope> </dependency>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With