This is continution to my previous post. In this post, I am going to explain how to test the rest api.
API details are given below:
url: /welcome
method: GET
expectedMessage: Welcome to Micronaut app!!!!
Following snippet test the rest api /welcome.
@MicronautTest
public class WelcomeControllerTest {
@Inject
EmbeddedServer embeddedServer;
@Inject
@Client("/")
HttpClient httpClient;
@Test
void testHelloWorldResponse() {
String response = httpClient.toBlocking().retrieve(HttpRequest.GET("/welcome"));
assertEquals("Welcome to Micronaut app!!!!", response);
}
}
a. @MicronautTest can be applied to any JUnit 5 test to make it a Micronaut test.
b. EmbeddedServer is a general abstraction to manage the lifecycle of any server implementation within a running Micronaut application. Embedded server runs on a randomly available port.
c. HttpClient used to make the calls and the retrieve method returns the response of the controller as a String.
Find the below working application.
Step 1: Create new maven project ‘micronaut-rest-hello-world-test’.
Step 2: Update pom.xml with maven dependencies.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample.app</groupId>
<artifactId>micronaut-rest-hello-world-test</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<parent>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-parent</artifactId>
<version>3.7.3</version>
</parent>
<properties>
<packaging>jar</packaging>
<jdk.version>11</jdk.version>
<release.version>11</release.version>
<micronaut.version>3.7.3</micronaut.version>
<micronaut.runtime>netty</micronaut.runtime>
<exec.mainClass>com.sample.app.App</exec.mainClass>
</properties>
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-validation</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-client</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-server-netty</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-jackson-databind</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.micronaut.test</groupId>
<artifactId>micronaut-test-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.micronaut.build</groupId>
<artifactId>micronaut-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- Uncomment to enable incremental compilation -->
<!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->
<annotationProcessorPaths
combine.children="append">
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-validation</artifactId>
<version>${micronaut.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>
Step 3: Define WelcomeController class.
WelcomeController.java
package com.sample.app.controller;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/welcome")
public class WelcomeController {
@Get(produces = MediaType.TEXT_PLAIN)
public String index() {
return "Welcome to Micronaut app!!!!";
}
}
Step 4: Define main application class.
App.java
package com.sample.app;
import io.micronaut.runtime.Micronaut;
public class App {
public static void main(String[] args) {
Micronaut.run(App.class);
}
}
Define WelcomeControllerTest class under src/test/java.
WelcomeControllerTest.java
package com.sample.app.controller;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.client.HttpClient;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.runtime.server.EmbeddedServer;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import jakarta.inject.Inject;
@MicronautTest
public class WelcomeControllerTest {
@Inject
EmbeddedServer embeddedServer;
@Inject
@Client("/")
HttpClient httpClient;
@Test
void testHelloWorldResponse() {
String response = httpClient.toBlocking().retrieve(HttpRequest.GET("/welcome"));
assertEquals("Welcome to Micronaut app!!!!", response);
}
}
Total project structure looks like below.
How to run the test cases?
Navigate to the folder, where pom.xml is located and execute below command.
mvn test
You will see test results in the console.
[INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.272 s [INFO] Finished at: 2022-11-22T13:52:51+05:30 [INFO] ------------------------------------------------------------------------
You can download this application from this link.
Previous Next Home
No comments:
Post a Comment