[JAVA] Testen Sie den Controller mit Mock MVC im Spring Boot

Testen Sie den von Spring MVC aus JUnit erstellten Controller mit Mock MVC.

Was ist MockMVC?

Sie können das Verhalten von Spring MVC reproduzieren, ohne es auf dem Anwendungsserver bereitzustellen. Mit MockMVC können Sie ganz einfach Tests für Ihren Controller erstellen. Fügen Sie build.gradle die folgende Beschreibung hinzu, um MockMVC mit Spring Boot zu verwenden.

build.gradle


testCompile('org.springframework.boot:spring-boot-starter-test')

Wenn Sie ein Projekt mit SPRING INITIALIZR https://start.spring.io/ erstellen, wird es standardmäßig in build.gradle beschrieben.

Umgebung

Um diesmal MockMVC auszuprobieren, habe ich ein Projekt bei SPRING INITIALIZR https://start.spring.io/ erstellt. Die Projekteinstellungen sind wie folgt. Da Spring MVC und Thymeleaf verwendet werden, wählen Sie bitte nach Belieben aus, außer dass Sie Web und Thymeleaf zur Abhängigkeit hinzufügen.

Erstellen Sie in dieser Umgebung eine Seite mit zwei Textfeldern und einer Registrierungsschaltfläche, um den Benutzernamen und die E-Mail-Adresse wie unten gezeigt einzugeben.

スクリーンショット 2017-12-28 17.43.49.png

Testen Sie mit MockMVC, ob die Eingabeseite angezeigt wird, wenn Sie über einen Browser auf die Stamm-URL zugreifen. Da der Zweck darin besteht, MockMVC zu testen, wird eine andere Verarbeitung als die Seitenanzeige weggelassen.

Controller erstellen

Erstellen Sie einen Controller, der index.html für GET-Anforderungen an die Stamm-URL anzeigt.

UserController.kt


@Controller
class UserController {

    @RequestMapping(value = "/", method = [(RequestMethod.GET)])
    fun index(model: Model): String {
        model.addAttribute("userForm", UserForm())
        return "index"
    }
}    

Formularklasse erstellen

Erstellen Sie eine Klasse für das Eingabeformular. Mit Kotlin können Sie die Datenklasse verwenden, sodass das Schreiben einfach ist.

UserForm.kt


data class UserForm(val name: String = "", val mail: String = "")

Ansicht erstellen

Build.gradle wurde Folgendes hinzugefügt, um BootStrap zu verwenden.

build.gradle


compile group: 'org.webjars', name: 'bootstrap', version: '3.3.7-1'

Erstellen Sie eine Seite mit Textfeldern und Schaltflächen in Thymeleaf, wie unten gezeigt.

index.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Benutzer Registration</title>
</head>
<body>
    <div class="container">
        <h1>Benutzer Registration</h1>
        <form id="userForm" method="post" th:action="@{/user}" th:object="${userForm}" action="/user">
            <div class="form-group">
                <label for="name">Name</label>
                <input class="form-control" id="name" type="text" th:feild="*{name}" name="name" placeholder="Name"/>
            </div>
            <div class="form-group">
                <label for="mail">Mail</label>
                <input class="form-control" id="mail" type="text" th:feild="*{mail}" name="mail" placeholder="Mail"/>
            </div>
            <button type="submit" class="btn btn-primary">Anmeldung</button>
        </form>
    </div>
</body>
</html>

Test erstellen

Senden Sie eine GET-Anfrage an die Root-URL und testen Sie Folgendes in der erhaltenen Antwort. --Index.html wird als Ansicht angezeigt --Statuscode ist 200

Erstellen Sie eine Testklasse wie folgt.

UserControllerTest.kt


@RunWith(SpringRunner::class) // ①
@WebMvcTest // ②
class UserControllerTest {

    @Autowired
    private lateinit var mockMvc: MockMvc  // ③

    @Test
    fun test1() {
        this.mockMvc.perform(get("/"))               // ④ 
                .andExpect(status().isOk)            // ⑤
                .andExpect(view().name("index"))     // ⑥
                .andExpect(xpath("/html/head/title").string("Title"))    // ⑦
                .andExpect(xpath("""//*[@id="name"]/@name""").string("name"))
                .andExpect(xpath("""//*[@id="name"]/@placeholder""").string("Name"))
                .andExpect(xpath("""//*[@id="name"]/@value""").string(""))
                .andExpect(xpath("""//*[@id="mail"]/@name""").string("mail"))
                .andExpect(xpath("""//*[@id="mail"]/@placeholder""").string("Mail"))
                .andExpect(xpath("""//*[@id="mail"]/@value""").string(""))
    }

}

-① Zum Testen der Feder mit JUnit. --② Verwenden Sie @WebMvcTest, um Ansichten und Controller mit MockMVC zu testen. --③ DI die Instanz von MockMvc --④ Senden Sie eine GET-Anfrage --⑤ Überprüfen Sie den HTTP-Status. --⑥ Überprüfen Sie, ob index.html als Ansicht angezeigt wird. --⑦ Überprüfen Sie, ob jedes Attribut des Textfelds korrekt ist. Sie können den Attributwert des Textfelds von XPath abrufen

Führen Sie den Test aus

Es kann als JUnit-Test von der IDE ausgeführt werden. Geben Sie Folgendes an, um die Testklasse von gradlew anzugeben.

./gradlew test --tests "package.ControllerTest"

Recommended Posts

Testen Sie den Controller mit Mock MVC im Spring Boot
Schreiben Sie den Testcode mit Spring Boot
Testen Sie den Spring Framework Controller mit Junit
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
Formularklassenvalidierungstest mit Spring Boot
Beispielcode zum Testen eines Spring Boot-Controllers mit MockMvc
SameSite-Cookie im Spring Boot (Spring Web MVC + Tomcat)
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Mit Spring Boot herunterladen
Nehmen Sie das externe Glas mit Spring boot2 + Maven3 in das Paket auf
Verwendungshinweis zu Spring Security: Zusammenarbeit mit Spring MVC und Boot
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Testen Sie die Klasse mit Feldinjektion im Spring-Boot-Test, ohne den Spring-Container zu verwenden
Bis Sie mit der Entwicklung mit Spring Boot in Eclipse 1 beginnen
Bis Sie mit der Entwicklung mit Spring Boot in Eclipse 2 beginnen
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Legen Sie den Kontextparameter in Spring Boot fest
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Java-Konfiguration mit Spring MVC
Implementieren Sie GraphQL mit Spring Boot
[Spring] Controller-Ausnahmeausgabetest
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Spring Boot 2 Multiprojekt mit Gradle
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Wichtige Änderungen in Spring Boot 1.5
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
NoHttpResponseException in Spring Boot + WireMock
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Memo zur Spring Boot Controller-Methode
MOCKEN Sie die Konstruktoren anderer Klassen mit Spring MVC + PowerMock + Junit
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Spring Boot-Anwendungsentwicklung in Eclipse
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
Implementieren Sie den Dateidownload mit Spring MVC
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot
Was ist @Autowired im Spring Boot?
Google Cloud Platform mit Spring Boot 2.0.0