Тестирование сервлетов - PullRequest
3 голосов
/ 14 января 2011

Я использую класс ServletTester , предоставленный Jetty для тестирования одного из моих сервлетов.

Сервлет читает тело запроса, используя InputStream.read () для создания байта.[], который декодируется и действует сервлетом.

Класс ServletTest предоставляет метод getResponses (ByteArrayBuffer), но я не уверен, как создать один из них в правильном формате, так как для этого также потребуетсясодержат такие вещи, как заголовки (например, «Content-Type: application / octet-stream).

Может кто-нибудь показать мне простой способ создания этого, предпочтительно с использованием существующей библиотеки, чтобы я мог использовать ее аналогичным образомк классу HttpTester .

Если есть «лучший» способ тестирования сервлетов (в идеале с использованием локального соединителя, а не через стек tcp), я бы тоже хотел это услышать.

Большое спасибо,

Ответы [ 3 ]

5 голосов
/ 14 января 2011

Зачем вообще использовать макет?Почему бы не проверить сервлет, запустив его на пристани?

Servlet servlet = new MyServlet();
String mapping = "/foo";

    Server server = new Server(0);
    Context servletContext = new Context(server, contextPath, Context.SESSIONS);
    servletContext.addServlet(new ServletHolder(servlet), mapping);
    server.start();

    URL url = new URL("http", "localhost", server.getConnectors()[0].getLocalPort(), "/foo?bar");

    //get the url...assert what you want

    //finally server.stop();

Редактировать: Просто хочу заверить людей, что это очень быстро.Это также очень надежный индикатор того, что на самом деле будет делать ваш код, потому что он на самом деле делает это.

3 голосов
/ 14 января 2011

Spring MVC предоставляет небольшой набор "фиктивных" классов для различных javax.servlet интерфейсов, таких как HttpServletRequest, HttpSession и т. Д.Это облегчает модульное тестирование подобных сервлетов, вы просто внедряете макеты в метод, например doGet().

Даже если вы не используете Spring непосредственно на сервере, вы все равно можете использовать mockиз библиотеки, только для ваших тестов.

1 голос
/ 14 января 2011

Вы можете использовать HttpClient, чтобы несколько упростить тестирование.Взгляните на следующую статью:

http://roberthanson.blogspot.com/2007/12/testing-servlets-with-junit.html

Что в сочетании с тестером сервлетов должно дать вам то, что вы хотите в модульном тестировании.

...