Testen Sie den von Spring MVC aus JUnit erstellten Controller mit Mock MVC.
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.
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.
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.
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"
}
}
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 = "")
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>
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
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