Servlets Unit-Test
-
24-09-2019 - |
Frage
Ich bin mit TestNG Rahmen Derzeit zum Testen Anwendung Business-Logik, fügte ich vor kurzem einige Servletklassen.
Wie kann ich Unit-Test diese Servletklassen in testng Rahmen?
Andere Tipps
Eine der einfachsten Möglichkeiten, um ServletTester aus Jetty. Alles wird automatisch innerhalb von eingebetteten Jetty getan, so gibt es keinen Anschluss bei der Prüfung geöffnet! Wenn Sie Maven als die folgenden Artefakt verwenden ist erforderlich, um diese Methode zu aktivieren:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-servlet-tester</artifactId>
<version>6.1.16</version>
<scope>test</scope>
</dependency>
Beispiel:
Bereiten ServletTester
ServletTester tester=new ServletTester();
tester.addServlet(HelloServlet.class, "/hello");
tester.start();
Erstellen Sie HTTP-Anforderung
HttpTester request = new HttpTester();
request.setMethod("GET");
request.setHeader("Host","tester");
request.setURI("/hello");
request.setVersion("HTTP/1.0");
Anruf Servlet und abrufen Antwort:
HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));
Assert was wollen Sie auf Antwort überprüfen, und es ist Inhalt:
assertEquals(200,response.getStatus());
assertEquals("Hello Servlet",response.getContent());
Ich schlage vor, dass Sie alle die Business-Logik aus den Servlet-Klassen bewegen, in der eigenen Klassen, die Sie testen können. Das läßt die Servlets nur als Klebstoff zwischen Geschäftslogik und der Behälter, mit nichts in ihnen wert Tests.
Die API-Klassen wie HttpServletRequest
, ServletConfig
, etc, sind Hauptziele für die Verwendung eines Mockframework Ihrer Wahl (JMock, Mockito, etc.), da sie sind alle Schnittstellen.