2013-01-06 16 views
11

Jak możemy przetestować serwlet z wbudowanym serwerem Jetty?test jednostki serwlet z osadzonym Jetty

Na przykład, jak przetestować metodę serwletu poniżej?

protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
    //any logic inside 
} 

Odpowiedz

14

Zdecydowanie wolę testowanie serwletów z wbudowaną instancją pomostu przy użyciu czegoś takiego jak junit, aby go załadować.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java

że jest minimalna przykładem tego, jak to zrobić.

W ten sposób testujemy ogromną większość samego pomostu, uruchamiając go i przeprowadzając go przez kolejne etapy.

Dla konkretnego serwletu lub obsługi często korzystamy z pomostu-klienta lub SimpleRequest w naszym artefakcie pomostu-test-pomocnika. Działa również funkcja URLConnection.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.toolchain.git/tree/jetty-test-helper/src/main/java/org/eclipse/jetty/toolchain/test/SimpleRequest.java

Tutaj jest test na molo-klienta, to na molo-9, więc jeśli chcesz 7 lub 8, a następnie spojrzeć pod odpowiednim znacznikiem, został refactored sporo na molo-9.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java

Uwaga: polecam przejść 0 jako port dla pomost do uruchomienia z, i że daje losową otwarty port, który można następnie wyciągnąć z molo do celów testowych, pozwala to uniknąć sytuacji gdzie wiele buildów jest uruchomionych na CI lub równoległych kompilacjach, gdzie może wystąpić konflikt portów.

+1

To bardzo pomocne. Ale w twoim przykładzie to naprawdę nie pokazuje, jak testujemy HelloServlet (lub coś bardziej skomplikowanego), wysyłając żądanie do serwletu. Czy mógłbyś podać więcej informacji? – blue123

0

Nie trzeba Jetty przetestować serwlet, trzeba ramy testów jednostkowych, takich jak JUnit, Mockito, JMock itp

Ogólnie rzecz biorąc, nie chcesz, aby użyć kontener serwletu, gdy przeprowadzasz testowanie jednostki, ponieważ chcesz skupić się na testowanej rzeczywistej metodzie, mając pomost w taki sposób, że testujesz także zachowanie pomostu. Po wykonaniu wszystkich testów jednostkowych można przejść do testów integracyjnych i testów systemowych, a część może dotyczyć systemów zewnętrznych, takich jak molo (za pomocą ram automatyki takich jak Selenium.)

używam Mockito i PowerMock zrobić testowanie mojej jednostki, możesz sprawdzić this code jako działający przykład prawdziwej usługi online (którą można znaleźć here). Napisałem samouczek dotyczący tej usługi i jej zawartości, którą można znaleźć pod adresem here.

[Dodano po otrzymaniu od czasu do czasu odpowiedzi w dół na tę odpowiedź]: I na ryzyko uzyskania jeszcze większej liczby głosów, wszyscy spadkowcy muszą przeczytać definicję TESTU JEDNOSTKI przed kliknięciem przycisku -1. Po prostu nie wiesz, o czym mówisz.

+0

Bardzo dziękuję za odpowiedź. Ale co, jeśli chcę sprawić, aby test jednostki był bardziej podobny do testu integracji z pomocą Jetty? Jak mogę przetestować? – blue123

+7

Nie zgadzam się z powyższą odpowiedzią, lepiej jest sprawdzić, jak zachowuje się serwlet, siedząc w kontenerze JEE, ponieważ tak będzie działał w rzeczywistości. Lepiej wiedzieć, jak twój kod będzie działał w prawdziwym życiu, niż w szyderczym obiekcie. – Jacob

+4

Popieram tę odpowiedź, pytanie w szczególności wymienia "test jednostkowy". Jeśli OP chce przeprowadzić testy integracyjne, wtedy tytuł jest błędny. – maksimov

Powiązane problemy