我正在使用httpunit ServletRunner進行servlet測試。現在我想測試使用請求屬性(不是參數)的servlet。屬性由我的過濾器提交給請求。所以爲了servlet正常工作,必須安裝過濾器。我可以將過濾器用於測試到httpunit ServletRunner嗎?
有什麼方法可以將過濾器添加到ServletRunner?
我正在使用httpunit ServletRunner進行servlet測試。現在我想測試使用請求屬性(不是參數)的servlet。屬性由我的過濾器提交給請求。所以爲了servlet正常工作,必須安裝過濾器。我可以將過濾器用於測試到httpunit ServletRunner嗎?
有什麼方法可以將過濾器添加到ServletRunner?
我不認爲這是可以做到的。 HttpUnit不提供WebRequest的setAttribute方法,這是合理的,因爲屬性只能從容器內設置。
但是,你能做什麼(甚至可能應該)是在單獨的測試單獨測試兩種 - 該過濾器把這些參數的請求,如果參數設置正確的servlet工作。做到這一點的方法是爲servlet創建一個模擬請求,爲其設置屬性併爲其運行常規單元測試。同樣的方法適用於過濾器。
這裏有一個過濾器做的一個例子:
@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());
}
模擬*對象是從春天。如果你的框架,沒有他們,你可以通過使用一些模擬庫中創建它們,或者使用可以從春源可以看到的人。
它看起來像
com.meterware.servletunit.WebApplication has registerFilters(...).需要用實例:
ServletRunner(File yourTestWebXml_WithFilter)
確保你至少聲明1的servlet,在您的測試web.xml中測試任何過濾器之前。