2011-02-16 44 views

回答

1

我不認爲這是可以做到的。 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()); 
} 

模擬*對象是從春天。如果你的框架,沒有他們,你可以通過使用一些模擬庫中創建它們,或者使用可以從春源可以看到的人。

1

它看起來像

com.meterware.servletunit.WebApplication has registerFilters(...).
需要用實例:
ServletRunner(File yourTestWebXml_WithFilter)

確保你至少聲明1的servlet,在您的測試web.xml中測試任何過濾器之前。

相關問題