2012-07-30 4 views
7

Jetzt schreibe ich den Testfall meiner Klasse. Ich möchte den HttpServletRequest-Objektparameter an meine Testfallmethode übergeben, um zu überprüfen, ob die Methode funktioniert oder nicht. Also gibt mir jemand den Vorschlag dazu.Wie übergebe ich das HttpServletRequest-Objekt an den Testfall?

public void testCheckBatchExecutionSchedule() throws Exception 
    { 
     assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request)); 
    } 

Antwort

4

HttpServletRequest ist eine Schnittstelle. In der Vergangenheit habe ich einfach eine Klasse (z. B. TestHttpServletRequest) erstellt, die für jede Methode in HttpServletRequest einen leeren Methodenhauptteil hatte, außer für die, die ich tatsächlich benötigte. Bei den meisten Methoden habe ich eine Instanzvariable zurückgegeben und einen Setter für diese Instanzvariable eingefügt, sodass der Testfall definieren kann, was zurückgegeben werden soll. HttpServletRequest hat viele Methoden, aber die meisten IDEs (ich benutze Eclipse) kann die Methode Stubs generieren.

Das Problem mit HttpServletRequestWrapper ist, dass es noch eine weitere in seinem Konstruktor als Standardverhalten für jede Methode übergeben benötigt. Passing null führt zu einem NullPointerException.

-1

von API von tomcat gegeben verwenden, können Sie HttpServletRequest erhalten Objekt

HttpServletRequest request = (HttpServletRequest)org.apache.catalina.core.ApplicationFilterChain.getLastServicedRequest(); 

Dies wird die letzte Anforderung an ein Servlet übergeben bekommen, um aus dem aktuellen Thread warten.

Dies funktioniert nur im Tomcat-Modus "Strict Servlet Compliance". Um sie zu aktivieren folgende JVM-Parameter hinzufügen:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true 
10

sollten Sie das Request-Objekt mit einer spöttischen Bibliothek verspotten, wie http://code.google.com/p/mockito/

public void testCheckBatchExecutionSchedule() throws Exception 
{ 
    HttpServletRequest mockRequest = mock(HttpServletRequest.class); 
    //setup the behaviour here (or do it in setup method or something) 
    when(mockRequest.getParameter("parameterName")).thenReturn("someValue"); 
    assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(mockRequest)); 
} 
22

Frühling eine Klasse bietet MockHttpServletRequest genannt, die dazu verwendet werden können, um Code zu testen das benötigt eine HttpServletRequest.

public void testCheckBatchExecutionSchedule() throws Exception 
{ 
    MockHttpServletRequest request = new MockHttpServletRequest(); 
    request.addParameter("parameterName", "someValue"); 
    assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request)); 
} 
+0

Ich habe Online dieser Klasse gefunden andere verspottet und dies ist der nur eine, die eine Logik enthält, die der ursprünglichen Klasse ähnelt. Zum Beispiel stellt 'getRequestURL() 'tatsächlich eine URL aus den anderen Attributen zusammen, nicht nur, was mit' setRequestURL() 'oder einem Konstruktor angegeben wurde. –

0

Aktualisiert Februar 2018: OpenBrace Limited has closed down und sein ObMimic Produkt wird nicht mehr unterstützt.

Sie können auch die ObMimic Bibliothek von Servlet API Test-Doppel verwenden:

import com.openbrace.obmimic.mimic.servlet.http.HttpServletRequestMimic; 

public void testCheckBatchExecutionSchedule() throws Exception 
{ 
    HttpServletRequestMimic request = new HttpServletRequestMimic(); 
    // Configure the request as necessary... 
    // e.g. request.getMimicState().getRequestParameters().set("name", "value"); 
    assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request)); 
} 

die Anfrage zu konfigurieren, hat die HttpServletRequestMimic eine getMimicState() -Methode, die ein HttpServletRequestState, über die alle relevanten Details der Anfrage zurück kann konfiguriert werden (und über die Sie auf alle zugehörigen ServletContext, HttpSession usw. zugreifen und diese bei Bedarf ähnlich konfigurieren können). Die Dokumentation für den HttpServletRequestState enthält eine summary seiner Eigenschaften und Methoden sowie vollständig detailliert Javadoc.

Beachten Sie, dass:

  • ObMimic bietet auch ähnliche "nachahmen" Klassen für HttpServletResponse, ServletContext, Http, ServletConfig usw.

  • eine kostenlose "Community Edition" von ObMimic ist von der Website verfügbar download Seite.

  • Die einzige Bibliothek, die Sie Ihrem Projekt hinzufügen müssen, ist Obmimics /lib/obmimic.jar (vorausgesetzt, die Servlet-API selbst ist bereits vorhanden).

  • Die ObMimic Website bietet eine vollständige Dokumentation, einschließlich einer Getting Started Führung, eine Reihe von How To Führer mit Beispiel-Code, detaillierte Javadoc usw.

Verwandte Themen