J'ai une fonction qui cherche 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 les deux junit et easymock dans mon pom.xml, comment puis-je me moquer de HttpServletRequest?
HttpServletRequest ressemble beaucoup à n'importe quelle autre interface, vous pouvez donc vous en moquer en suivant le Lisezmoi EasyMock
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");
}
}
Utilisez un cadre moqueur, par exemple Mockito ou JMock qui vient avec la capacité de se moquer de tels objets.
Dans Mockito, vous pouvez vous moquer de:
HttpServletRequest mockedRequest = Mockito.mock(HttpServletRequest.class);
Pour plus de détails sur Mockito, voir: Comment le boire? sur le site de Mockito.
Dans JMock, vous pouvez vous moquer de:
Mockery context = new Mockery();
HttpServletRequest mockedRequest = context.mock(HttpServletRequest.class);
Pour plus de détails sur jMock, veuillez vous reporter à: jMock - Mise en route
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
Je ne connais pas easymock, mais le livre "Tests unitaires en Java: comment les tests pilotent le code" de Johannes Link contient des explications sur la façon de tester les servlets à l'aide d'une bibliothèque qu'il aurait construite d'objets factices.
Le site compagnon du livre a maintenant disparu (changement de société d’édition de quelque chose ...) mais le site compagnon de la publication allemande originale est toujours disponible . À partir de celui-ci, vous pouvez télécharger les définitions de tous les objets factices .
Regardez Mockrunner: http://mockrunner.sourceforge.net/
Il a beaucoup de simulacres Java EE faciles à utiliser, y compris HttpServletRequest et HttpServletResponse.