[JAVA] Einführung in Micronaut 2 ~ Unit Test ~

Überblick

Einführung in Micronaut 1 ~ Einführung ~ wurde fortgesetzt Führen Sie einen Komponententest durch, indem Sie den zuletzt erstellten HelloController geringfügig erweitern. Verwenden Sie das Micronaut-Erweiterungsmodul Micronaut Test.

Was ist ein Mikronautentest?

Testrahmen für Micronaut

Sie können mit beiden testen. Dieses Mal werden wir mit JUnit 5 testen.

Änderung / Hinzufügung der Implementierungsklasse

Controller reparieren

Fügen Sie HelloController eine Testmethode hinzu.

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!!";
    }

    //Zum Testen mit mehreren Parametern hinzugefügt
    @Get(uri = "/{path}",processes = MediaType.TEXT_PLAIN)
    public String index(String path) {
        return path;
    }

    //Serviceklassenverarbeitung Zur Scheinbestätigung hinzugefügt
    @Get(uri = "/compute/{number}",processes = MediaType.TEXT_PLAIN)
    public String compute(Integer number) {
        //Setzen Sie die Berechnungsmethode während des Tests auf Mock.
        return String.valueOf(helloService.compute(number));
    }
}
Serviceklasse hinzufügen

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;
    }
}

Gerätetest

Fügen Sie abhängige Bibliotheken hinzu

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"
}
Hinzufügung eines Einheitentests

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 {
    //Testen Sie HelloController mit 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
    //Sie können mehrere Parameter übergeben und mehrmals mit derselben Quelle testen
    @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) {

        //Stellen Sie das Verhalten von Mock ein
        when(helloService.compute(num))
                .then(invocation -> Long.valueOf(Math.round(Math.pow(num, 2))).intValue());

        //Rufen Sie den Controller an, um das Ergebnis zu erhalten
        final Integer result = client.toBlocking().retrieve(HttpRequest.GET("/hello/compute/" + num), Integer.class);

        assertEquals(
                square,
                result
        );
        verify(helloService).compute(num);
    }

    //Mock-Definition mit MockBean
    @MockBean(HelloServiceImpl.class)
    HelloService mathService() {
        return mock(HelloService.class);
    }
}

Impressionen

Da es sich um einen Komponententest mit JUnit handelt, scheint die Einführungsbarriere niedrig zu sein. Da Micronaut schnell startete, war der Test leicht und gut.

Referenz

https://micronaut-projects.github.io/micronaut-test/latest/guide/index.html

Recommended Posts

Einführung in Micronaut 2 ~ Unit Test ~
Einführung in Micronaut 1 ~ Einführung ~
So führen Sie einen Komponententest für Spring AOP durch
Einführung in Ruby 2
Java Artery - Einfach zu verwendende Unit-Test-Bibliothek
Einführung in web3j
[Java] Einführung in Java
Einführung in die Migration
Einführung in Java
Einführung in Doma
Einführung in Ratpack (8) -Session
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in PlayFramework 2.7 ① Übersicht
Einführung in das Android-Layout
Java Unit Test Library-Arterien-Probe
Einführung in Entwurfsmuster (Einführung)
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
Einführung in den Lambda-Stil
Machen Sie einen Unit-Test mit Junit.
Einführung in den Java-Befehl
Einführung in die Keycloak-Entwicklung
Einführung in den Befehl javac
So schreiben Sie einen Komponententest für Spring Boot 2
So führen Sie mit RxAndroid einen Komponententest mit JVM an einer Quelle durch
Dynamisches Schreiben iterativer Testfälle mit test / unit (Test :: Unit)
Einführung in Entwurfsmuster (Builder)
Einführung in die Android App-Entwicklung
Einführung in Ratpack (5) --Json & Registry
Einführung in Metabase ~ Umgebungskonstruktion ~
Einführung in Ratpack (7) - Guice & Spring
(Punktinstallation) Einführung in Java8_Impression
[IntelliJ IDEA] Unit-Test durchführen
Einführung in Entwurfsmuster (Composite)
Einführung in JUnit (Studiennotiz)
Einführung in Spring Boot ~ ~ DI ~
Unit-Test der Architektur mit ArchUnit
Einführung in Designmuster (Fliegengewicht)
[Java] Einführung in den Lambda-Ausdruck
Einführung in Spring Boot ② ~ AOP ~
Einführung in Apache Beam (2) ~ ParDo ~
Einführung in die EHRbase 2-REST-API
Einführung in Entwurfsmuster Prototyp
[Rails] Integrationstest mit Capybara (von der Einführung bis zur einfachen Testausführung)
[Java] Einführung in die Stream-API
Einführung in Entwurfsmuster (Iterator)