unit test servlet
-
24-09-2019 - |
Domanda
Al momento sto utilizzando quadro TestNG per testare la logica di business dell'applicazione, ho aggiunto alcune classi Servlet di recente.
Come faccio a unità di prova queste classi Servlet in quadro TestNG?
Altri suggerimenti
Uno dei modi più semplici è ServletTester dal molo. Tutto è fatto all'interno incorporato Jetty automaticamente, quindi non c'è alcuna porta aperta durante il test! Se si utilizza Maven oltre il successivo manufatto è necessario per attivare questo metodo:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-servlet-tester</artifactId>
<version>6.1.16</version>
<scope>test</scope>
</dependency>
Esempio:
Preparare ServletTester
ServletTester tester=new ServletTester();
tester.addServlet(HelloServlet.class, "/hello");
tester.start();
Crea richiesta HTTP
HttpTester request = new HttpTester();
request.setMethod("GET");
request.setHeader("Host","tester");
request.setURI("/hello");
request.setVersion("HTTP/1.0");
servlet chiamata e recuperare la risposta:
HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));
Assert ciò che si desidera controllare sulla risposta e il suo contenuto:
assertEquals(200,response.getStatus());
assertEquals("Hello Servlet",response.getContent());
Vi suggerisco di spostare tutta la logica di business il delle classi servlet, nelle proprie classi che è possibile testare. Che lascia la servlet proprio come collante tra la logica di business e il contenitore, con niente in loro la pena di test.
Le classi API quali HttpServletRequest
, ServletConfig
, ecc, sono obiettivi principali per l'utilizzo di un quadro beffardo di vostra scelta (JMock, Mockito, ecc), dal momento che sono tutte le interfacce.