Introduction à Micronaut 1 ~ Introduction ~ suite Effectuez un test unitaire en étendant légèrement le HelloController créé la dernière fois. Utilisez le module d'extension Micronaut Micronaut Test.
Cadre de test pour Micronaut
Vous pouvez tester avec l'un ou l'autre. Cette fois, nous allons tester avec JUnit 5.
Ajoutez une méthode de test à HelloController.
HelloController.java
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import my.app.service.HelloService;
@Controller("/hello")
public class HelloController {
HelloService helloService;
HelloController(HelloService helloService) {
this.helloService = helloService;
}
@Get(produces = MediaType.TEXT_PLAIN)
public String index() {
return "hello world!!";
}
//Ajouté pour tester avec plusieurs paramètres
@Get(uri = "/{path}",processes = MediaType.TEXT_PLAIN)
public String index(String path) {
return path;
}
//Traitement de classe de service ajouté pour la confirmation simulée
@Get(uri = "/compute/{number}",processes = MediaType.TEXT_PLAIN)
public String compute(Integer number) {
//Définissez la méthode de calcul sur Mock pendant le test.
return String.valueOf(helloService.compute(number));
}
}
HelloService
public interface HelloService {
public Integer compute(Integer num);
}
HelloServiceImpl
import javax.inject.Singleton;
@Singleton
public class HelloServiceImpl implements HelloService {
@Override
public Integer compute(Integer num) {
return num * 4;
}
}
build.gradle
dependencies {
・ ・ ・
testAnnotationProcessor "io.micronaut:micronaut-inject-java"
testCompile "io.micronaut.test:micronaut-test-junit5"
testCompile "org.junit.jupiter:junit-jupiter-params"
testCompile "org.mockito:mockito-core:2.24.5"
testRuntime "org.junit.jupiter:junit-jupiter-engine"
}
HelloControllerTest.java
import io.micronaut.http.HttpRequest;
import io.micronaut.http.client.RxHttpClient;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.test.annotation.MicronautTest;
import io.micronaut.test.annotation.MockBean;
import my.app.service.HelloService;
import my.app.service.HelloServiceImpl;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import javax.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*;
@MicronautTest
public class HelloControllerTest {
//Tester HelloController avec RxHttpClient
@Inject
@Client("/")
RxHttpClient client;
@Inject
HelloService helloService;
@Test
void testHelloIndex() {
final String result = client.toBlocking().retrieve(HttpRequest.GET("/hello"), String.class);
assertEquals(
"hello world!!",
result
);
}
@ParameterizedTest
//Vous pouvez passer plusieurs paramètres et tester plusieurs fois avec la même source
@ValueSource(strings = { "racecar", "radar" })
void testHelloIndexPath(String path) {
final String result = client.toBlocking().retrieve(HttpRequest.GET("/hello/" + path), String.class);
assertEquals(
path,
result
);
}
@ParameterizedTest
@CsvSource({"2,4", "3,9"})
void testComputeNumToSquare(Integer num, Integer square) {
//Définir le comportement de Mock
when(helloService.compute(num))
.then(invocation -> Long.valueOf(Math.round(Math.pow(num, 2))).intValue());
//Appelez le contrôleur pour obtenir le résultat
final Integer result = client.toBlocking().retrieve(HttpRequest.GET("/hello/compute/" + num), Integer.class);
assertEquals(
square,
result
);
verify(helloService).compute(num);
}
//Définition fictive à l'aide de MockBean
@MockBean(HelloServiceImpl.class)
HelloService mathService() {
return mock(HelloService.class);
}
}
Puisqu'il s'agit d'un test unitaire utilisant JUnit, la barrière d'introduction semble faible. Depuis que Micronaut a démarré rapidement, le test était léger et bon.
https://micronaut-projects.github.io/micronaut-test/latest/guide/index.html
Recommended Posts