Testez le contrôleur créé par Spring MVC à partir de JUnit à l'aide de Mock MVC.
Vous pouvez reproduire le comportement de Spring MVC sans le déployer sur le serveur d'applications. MockMVC facilite la création de tests pour votre contrôleur. Pour utiliser MockMVC avec Spring Boot, ajoutez la description suivante à build.gradle.
build.gradle
testCompile('org.springframework.boot:spring-boot-starter-test')
Lorsque vous créez un projet avec SPRING INITIALIZR https://start.spring.io/, il est décrit par défaut dans build.gradle.
Pour essayer MockMVC cette fois, j'ai créé un projet chez SPRING INITIALIZR https://start.spring.io/. Les paramètres du projet sont les suivants. Puisque Spring MVC et Thymeleaf sont utilisés, veuillez sélectionner comme vous le souhaitez, sauf pour ajouter Web et Thymeleaf à la dépendance.
--Version de démarrage de printemps: 2.0M7 --Outil de construction: Gradle --Langue: Kotlin
Dans cet environnement, créez une page avec deux zones de texte et un bouton d'inscription pour saisir le nom d'utilisateur et l'adresse e-mail comme indiqué ci-dessous.
Testez avec MockMVC que la page d'entrée s'affiche lors de l'accès à l'URL racine à partir d'un navigateur. Le but étant d'essayer MockMVC, le traitement autre que l'affichage de page est omis.
Créez un contrôleur qui affiche index.html pour les requêtes GET à l'URL racine.
UserController.kt
@Controller
class UserController {
@RequestMapping(value = "/", method = [(RequestMethod.GET)])
fun index(model: Model): String {
model.addAttribute("userForm", UserForm())
return "index"
}
}
Créez une classe pour le formulaire de saisie. Kotlin vous permet d'utiliser la classe de données, donc c'est simple à écrire.
UserForm.kt
data class UserForm(val name: String = "", val mail: String = "")
Ajout de ce qui suit à build.gradle pour utiliser BootStrap.
build.gradle
compile group: 'org.webjars', name: 'bootstrap', version: '3.3.7-1'
Créez une page avec des zones de texte et des boutons dans Thymeleaf comme indiqué ci-dessous.
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>Enregistrement de l'utilisateur</title>
</head>
<body>
<div class="container">
<h1>Enregistrement de l'utilisateur</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">enregistrement</button>
</form>
</div>
</body>
</html>
Envoyez une requête GET à l'URL racine et testez les éléments suivants dans la réponse obtenue. --Index.html s'affiche sous forme de vue
Créez une classe de test comme suit.
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(""))
}
}
-① Utilisé pour tester Spring avec JUnit. --② Utilisez @WebMvcTest pour tester la vue et le contrôleur à l'aide de MockMVC. --③ DI l'instance de MockMvc --④ Envoyer une demande GET --⑤ Vérifiez l'état HTTP. --⑥ Vérifiez que index.html est affiché sous forme de vue. --⑦ Vérifiez que chaque attribut de la zone de texte est correct. Vous pouvez obtenir la valeur d'attribut de la zone de texte par XPath
Il peut être exécuté en tant que test JUnit à partir de l'EDI. Pour spécifier la classe de test à partir de gradlew, spécifiez comme suit.
./gradlew test --tests "package.ControllerTest"
Recommended Posts