Dans SpringMVC, les cas de test généraux testent la couche de service. Aujourd'hui, je vais montrer comment utiliser SpringMVC Mock pour tester directement le code de couche du contrôleur.
1. Qu'est-ce que les tests simulés?
Le test Mock est une méthode de test qui utilise un objet virtuel à créer pour les tests pour certains objets qui ne sont pas faciles à construire ou à obtenir pendant le processus de test.
2. Pourquoi utiliser le test simulé?
Les tests avec l'objet simulé sont principalement utilisés pour simuler des outils qui ne sont pas faciles à construire dans des applications (telles que HttpServleRequest doivent être construites dans des conteneurs de servlets) ou des objets relativement complexes (tels que les objets de résultat dans JDBC) afin de rendre le test en douceur.
3. Annotations communes
Runwith (SpringJunit4ClassRunner.class): signifie l'utilisation des composants de test Spring pour les tests unitaires;
WebAppConfiguration: L'utilisation de cette annotation permettra un service Web lors de l'exécution de tests unitaires, puis commencera à appeler l'API REST du contrôleur, puis arrêtez le service Web une fois le test unitaire terminé;
ContextConfiguration: il existe de nombreuses façons de spécifier les informations sur le fichier de configuration du bean. Cet exemple utilise le formulaire de chemin de fichier. S'il y a plusieurs fichiers de configuration, les informations dans les supports peuvent être configurées comme un tableau de chaîne pour les représenter;
4. Installez l'environnement de test
Le cadre de test Spring MVC fournit deux façons: l'installation et l'intégration indépendamment des tests d'environnement Web (cette méthode n'intégre pas l'environnement Web réel, mais simule et teste via l'API Mock correspondant sans démarrer le serveur).
Méthode d'essai d'installation indépendante
Mockmvcbuilders.standalonesEtup (objet ... contrôleurs): spécifiez un ensemble de contrôleurs via des paramètres, afin que vous n'ayez pas besoin de l'obtenir à partir du contexte;
Il y a deux étapes principales:
(1) Créez d'abord le contrôleur correspondant vous-même et injectez les dépendances correspondantes
(2) Simuler un environnement de test MVC via MockMvcBuilders.StandalonesEtup, et obtenez un MockMVC par Build
Le code est le suivant:
package com.xfs.test; import org.junit.assert; import org.junit.before; import org.junit.test; import org.springframework.test.web.servlet.mockmvc; import org.springframework.test.web.servlet.request.mockmvcrequestbuildrs; org.springframework.test.web.servlet.result.mockmvcresulthandlers; import org.springframework.test.web.servlet.result.mockmvcresultmatchers; import org.springframework.test.web.servlet.setup.mockmvcbuilders; com.alibaba.fastjson.json; import com.alibaba.fastjson.jsonObject; import com.xfs.web.controller.apiController; / ** * Méthode de test d'installation indépendante Springmvc Mock Test * * @Author Admin * * 10:39:49 AM le 23 novembre 2017 * / public Class Testapione {private Mockmv Mockmvc; @Before public void setup () {apiController apiController = new APIController (); mockmvc = mockmvcbuilders.standalonesEtup (apiController) .build (); } @Test public void testgetSequence () {try {mvCresult mvCresult = mockmvc.perform (mockmvcrequestbuilders.post ("/ api / getSequence")) .Andexpect (mockmvcresultmatchers.status.print. .Andreturn (); int status = mvCreult.getResponse (). getStatus (); System.out.println ("Code d'état de la demande:" + Statut); String result = mvCresult.getResponse (). GetContentString (); System.out.println ("Interface Renvoie Résultat:" + Résultat); JSONObject resultObj = JSON.ParseObject (Result); // Déterminez si le champ de réussite de l'interface revient à JSON est True ASSERT.ASSERTTRUE (resultObj.getBooleanValue ("Success")); } catch (exception e) {e.printStackTrace (); }}}Le résultat de la demande est le suivant:
Environnement Web intégré
Mockmvcbuilders.webappContextSettup (WebApplicationContext Contexte): Spécifiez WebApplicationContext, et le contrôleur correspondant sera obtenu à partir du contexte et le MOCKMVC correspondant sera obtenu;
Il y a trois étapes principales:
(1) @WebappConfiguration: utilisé dans l'environnement de test, ce qui signifie que l'applicationContext utilisé dans l'environnement de test sera de type WebApplicationContext; La valeur spécifie la racine de l'application Web;
(2) via @Autowired WebApplicationContext WAC: Contaiteur ApplicationContext injecté dans l'environnement Web
(3) Créez ensuite un mockmvc via mockmvcbuilders.webappContextSettup (wac) .build () pour les tests
Le code est le suivant:
package com.xfs.test; import org.junit.assert; import org.junit.before; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; importation org.springframework.mock.wotation.mockhtppssion; org.springframework.test.context.contextConfiguration; import org.springframework.test.context.junit4.AbstractJunit4SpringContextTests; import org.springframework.test.context.web.webappconfiguration; import org.springframework.test.web.servert.MockMockMock org.springframework.test.web.servlet.request.mockmvcrequestbuilders; import org.springframework.test.web.servlet.result.mockmvcreserthandlers; import org.springframework.test.web.servlet.result.mockMvcrecraters; org.springframework.test.web.servlet.setup.mockmvcbuilders; import org.springframework.wson.context.webapplicationcontext; import com.alibaba.fastjson.json; import com.alibaba.fastjson.jsonObject; / ** * novembre web l'environnement Springmvc mock test * @Auror Administra 2017 à 11:12:43 AM * / @ runwith (JUnit4Classrunner.class) @ webappConfiguration @ contextConfiguration (Locations = {"ClassPath *: Spring / *. Xml"}) public class Testapitwo étend AbstractJunit4SPringContextSts {@autowired public WebapplicationContext wac; Public MockMVC MockMVC; Session publique MockHTTPSESSIE; @BeFore public void avant () lève une exception {mockmvc = mockmvcbuilders.webappContextSetUp (wac) .build (); } @Test public void testgetSequence () {try {mvCresult mvCresult = mockmvc.perform (mockmvcrequestbuilders.post ("/ api / getSequence")) .Andexpect (mockmvcresultmatchers.status.print. .Andreturn (); int status = mvCreult.getResponse (). getStatus (); System.out.println ("Code d'état de la demande:" + Statut); String result = mvCresult.getResponse (). GetContentString (); System.out.println ("Interface Renvoie Résultat:" + Résultat); JSONObject resultObj = JSON.ParseObject (Result); // Déterminez si le champ de réussite de l'interface renvoie JSON est True Assert.AsersertTrue (resultObj.getBooleanValue ("Success")); } catch (exception e) {e.printStackTrace (); }}}Les résultats de la course sont les mêmes que ceux du test indépendant ci-dessus.
Résumer:
L'ensemble du processus:
1. MOCKMVC.PERFORM exécute une demande;
2. MockmvCrequestBuilders.get ("/ user / 1") construit une demande
3. ResultAts.Andexpect ajoute des affirmations après exécution
4. ResultAracs.anddo ajoute un processeur de résultats pour indiquer quoi faire avec le résultat. Par exemple, utilisez MockMvCresulthandlers.print () pour produire l'intégralité des informations sur les résultats de la réponse.
5. ResultAts.Andreturn signifie que le résultat correspondant est renvoyé une fois l'exécution terminée.
L'ensemble du processus de test est très régulier:
1. Préparez-vous à l'environnement de test
2. Exécutez les demandes via MockMvc
3. Ajouter une affirmation de vérification
4. Ajouter un processeur de résultat
5. Obtenez MVCRESULT pour les assertions personnalisées / faites la prochaine demande asynchrone
6. Débutant l'environnement de test
Référence: Spring-MVC-test-Framework
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.