Могу ли я прикрепить фильтр для тестирования к httpunit ServletRunner? - PullRequest
1 голос
/ 16 февраля 2011

Я использую httpunit ServletRunner для тестирования сервлетов.Теперь я хочу протестировать сервлет, который использует атрибуты запроса (а не параметры).Атрибуты помещаются в запрос моим фильтром.Поэтому для правильной работы сервлета должен быть установлен фильтр.

Есть ли способ добавить фильтр в ServletRunner?

Ответы [ 2 ]

1 голос
/ 10 апреля 2013

Похоже, что

com.meterware.servletunit.WebApplication has registerFilters(...).
Необходимо создать с помощью:
ServletRunner( File yourTestWebXml_WithFilter )

Убедитесь, что вы объявили хотя бы 1 сервлет, прежде чем тестировать фильтры в своем тесте web.xml.

1 голос
/ 09 января 2012

Я не думаю, что это можно сделать.HttpUnit не предоставляет метод setAttribute для WebRequest, что имеет смысл, поскольку атрибуты могут быть установлены только из контейнера.

Однако, что вы можете сделать (и, возможно, даже должны), это проверить оба по отдельности в отдельных тестах- этот фильтр помещает параметры в запрос, и сервлет работает, если параметры установлены правильно.Способ сделать это - создать ложный запрос для сервлета, установить для него атрибуты и запустить для этого обычный модульный тест.Тот же подход применяется к фильтру.

Вот пример работы с фильтром:

@Test
public void testDefaultRequestEncoding() throws ServletException, IOException {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding(CONFIGURED_ENCODING_UTF8);
    filter.setForceEncoding(ENFORCE_ENCODING_TRUE);

    MockHttpServletRequest request = new MockHttpServletRequest();
    MockHttpServletResponse response = new MockHttpServletResponse();
    FilterChain filterChain = new MockFilterChain();

    request.setCharacterEncoding(TEST_ENCODING_ISO_8859_15);

    filter.doFilter(request, response, filterChain);

    assertEquals(CONFIGURED_ENCODING_UTF8, request.getCharacterEncoding());
    assertEquals(CONFIGURED_ENCODING_UTF8, response.getCharacterEncoding());
}

Mock * объекты из Spring.Если в вашей среде их нет, вы можете создать их с помощью некоторой фиктивной библиотеки или использовать те, которые можно увидеть из источников Spring.

...