Comment se moquer de HttpServletRequest? [dupliquer]

Cette question a déjà une réponse ici:

J'ai une fonction qui recherche un paramètre de requête et retourne un booléen:

  public static Boolean getBooleanFromRequest(HttpServletRequest request, String key) {
        Boolean keyValue = false;
        if(request.getParameter(key) != null) {
            String value = request.getParameter(key);
            if(keyValue == null) {
                keyValue = false;
            }
            else {
                if(value.equalsIgnoreCase("true") || value.equalsIgnoreCase("1")) {
                    keyValue = true;
                }
            }
        }
        return keyValue;
    }

J'ai à la fois junit et easymock dans mon pompon.xml, Comment puis-je me moquer de HttpServletRequest ?

24
demandé sur Blankman 2012-10-18 05:41:20

5 réponses

HttpServletRequest est un peu comme toute autre interface, de sorte que vous pouvez vous moquer en suivant le EasyMock Readme

Voici un exemple de test unitaire de votre méthode getbooleanfromrequest

// static import allows for more concise code (createMock etc.)
import static org.easymock.EasyMock.*;

// other imports omitted

public class MyServletMock
{
   @Test
   public void test1()
   {
      // Step 1 - create the mock object
      HttpServletRequest req = createMock(HttpServletRequest.class);

      // Step 2 - record the expected behavior

      // to test true, expect to be called with "param1" and if so return true
      // Note that the method under test calls getParameter twice (really
      // necessary?) so we must relax the restriction and program the mock
      // to allow this call either once or twice
      expect(req.getParameter("param1")).andReturn("true").times(1, 2);

      // program the mock to return false for param2
      expect(req.getParameter("param2")).andReturn("false").times(1, 2);

      // switch the mock to replay state
      replay(req);

      // now run the test.  The method will call getParameter twice
      Boolean bool1 = getBooleanFromRequest(req, "param1");
      assertTrue(bool1);
      Boolean bool2 = getBooleanFromRequest(req, "param2");
      assertFalse(bool2);

      // call one more time to watch test fail, just to liven things up
      // call was not programmed in the record phase so test blows up
      getBooleanFromRequest(req, "bogus");

   }
}
9
répondu Guido Simone 2015-01-20 07:11:48

Utilisez un cadre moqueur, par exemple Mockito ou JMock qui vient avec la capacité moqueuse de ces objets.

Dans Mockito, vous pouvez faire des moqueries comme:

 HttpServletRequest  mockedRequest = Mockito.mock(HttpServletRequest.class);

Pour plus de détails sur Mockito, voir: Comment puis-je le boire? sur le site Mockito.

Dans JMock, vous pouvez faire des moqueries comme:

 Mockery context = new Mockery();
 HttpServletRequest  mockedRequest = context.mock(HttpServletRequest.class);

Pour plus de détails sur jMock, veuillez vous référer à: Jmock-Getting Started

14
répondu Yogendra Singh 2016-07-01 00:08:12

C'est un vieux fil ... mais la question est toujours d'actualité.

Un autre bon choix est MockServiceRequest et MockServiceResponse dans le framework Spring:

Http://docs.spring.io/spring/docs/2.0.x/api/org/springframework/mock/web/package-summary.html

10
répondu FoggyDay 2014-07-23 04:55:45

Je ne connais pas easymock, mais le livre 'Unit Testing in Java: How Tests Drive the Code' de Johannes Link contenait des explications sur la façon de tester les Servlets en utilisant une bibliothèque qu'il construirait avec des objets factices.

Le site compagnon pour le livre est maintenant parti (changement dans la société d'édition de quelque chose...) mais le site compagnon de la publication allemande originale est toujours en place . A partir de là, vous pouvez télécharger les définitions de tous les objets fictifs .

2
répondu Richard JP Le Guen 2012-10-18 01:59:44

Jetez un oeil à Mocrunner: http://mockrunner.sourceforge.net/

Il a beaucoup de mocks Java EE faciles à utiliser, y compris HttpServletRequest et HttpServletResponse.

0
répondu mbelow 2013-01-20 10:27:36