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?

War es hilfreich?

Lösung

Folgen skaffman Rat, wenn möglich. Wenn nicht, oder wenn Sie das Verhalten der Servlets als Front-End-Controller, anstatt die Business-Logik in ihnen testen möchten, können Sie:

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top