8
votes

Spring-Test-MVC / MockServletContext - Contenu vide au test mais travaillant sur Tomcat

Nous essayons de configurer Spring-Test-MVC pour notre application Web Spring-MVC. Nous avons commencé à utiliser Freemarker et tout allait bien. Nous avons décidé de l'encontre et essayons maintenant de la configurer avec JSP. Lorsque l'application de test est déployée sur un tomcat, cela fonctionne. Lorsque nous exécutons le test simple:

MockHttpServletRequest:
         HTTP Method = GET
         Request URI = /
          Parameters = {}
             Headers = {}

             Handler:
                Type = package.to.controller.HomeController
              Method = public org.springframework.web.servlet.ModelAndView package.to.controller.HomeController.index()

  Resolved Exception:
                Type = null

        ModelAndView:
           View name = index
                View = null
           Attribute = welcome
               value = Hello World!

            FlashMap:

MockHttpServletResponse:
              Status = 200
       Error message = null
             Headers = {}
        Content type = null
                Body = 
       Forwarded URL = /views/index.jsp
      Redirected URL = null
             Cookies = []


0 commentaires

3 Réponses :


1
votes

Ajout de votre édition3, essentiellement pour le rendu JSP L'appel final est

RequestDispatcher requestDispatcher = httpRequest.getRequestDispacher(jspPath)
requestDispatcher.forward(httpRequest,httpResponse)


0 commentaires

9
votes

@biju - J'apprécie cette réponse et cela m'a sauvé un voyage, et je n'essaie pas de tirer sur le messager ici, mais je dois dire au profit de quiconque de l'équipe de printemps qui pourrait être motivée pour construire quelque chose Mieux vaut MockMVC pour être à peu près un exercice de trivialité et de futilité. Premièrement, l'authentification du ressort n'est pas directement prise en charge. Ok assez juste si vous scrutez Stackoverflow, vous pouvez trouver une solution de contournement. Ensuite, je constate que si vous avez dans votre configuration de contexte de printemps, chaque chemin que vous pouvez rattraper est "OK", même s'il devrait renverser "NOTOND". Ok, quoi que ce soit, sortez ça et laissez-nous ne plus jamais en parler. :) Et maintenant, venez découvrir que MockMVC n'est vraiment que MockMC - aucun traitement de vue n'a lieu. Donc, à la fin de la journée, ce que ce logiciel est bon pour tester les applications qui ne contiennent ni de sécurité ni de vues - ce qui serait, quoi, exactement, les applications JSON jouet?

Et ce n'est pas vraiment une réponse, c'est un discours, ce qui signifie maintenant que MockMVC va me coûter aussi la réputation de Stackoverflow aussi! :) Hulk Smash!

[EDIT] - OK Rant de côté, il ressemble à des voies autour de cela. [Editer ultérieurement] Malheureusement, la voie à laquelle j'ai trouvé n'est plus disponible.


5 commentaires

Bien que c'était une déclaration, il s'agissait aussi d'une déclaration utile, probablement juste m'a sauvé 2 heures de même que vous le mettez si élégamment "Scout Stackoverflow"


Ah ... ce lien est à un site de spam sexuel.


@dwjohnston - Oui, maintenant c'est, mais pas quand je le monte. En tout cas, j'ai supprimé le lien.


Quel était le chemin qui l'entoure? Cela pourrait-il fonctionner à nouveau maintenant? Je suis Avoir le même problème .


En fait, j'ai constaté que cela rendait effectivement la vue si vous chargez réellement votre configuration de vue (je n'étais pas au début). Apparemment, cela ne fonctionne pas pour les points de vue JSP, mais je ne suis intéressé que par XML et JSON.



0
votes

J'ai créé une version modifiée de MockReQuestDispatcher qui construit la même chaîne que MockMVC et transmet la demande à cette chaîne pour les demandes de terme. Cela fixe ce problème pour moi. Un peu plus de travail doit être fait si la vue est rendue à l'extérieur du servlet Dispatcher (par exemple via JSP).

Le code est là: https://gist.github.com/micw/a8b20720db900762a29d

La plupart des travaux devaient l'injecter au bon endroit. Je l'ai fait ma création d'un demandeur de demande de mockmvc et de ma moqueur qui intercepte l'appel de MockHttpServleReQuest.getreQuestDisPatcher.

Pour l'utiliser, ajoutez-le à votre parcours de test et appelez-le directement après la création de votre instance MockMVC: < / p> xxx


0 commentaires