gpt4 book ai didi

unit-testing - 我可以将用于测试的过滤器附加到 httpunit ServletRunner 吗?

转载 作者:行者123 更新时间:2023-11-28 20:33:51 24 4
gpt4 key购买 nike

我正在使用 httpunit ServletRunner 进行 servlet 测试。现在我想测试使用请求属性(而不是参数)的 servlet。属性由我的过滤器放入请求中。因此,为了使 servlet 正常工作,必须安装过滤器。

有什么方法可以给 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());
}

Mock* 对象来自 Spring。如果您的框架没有它们,您可以使用一些模拟库来创建它们,或者使用可以从 Spring 源代码中看到的那些。

关于unit-testing - 我可以将用于测试的过滤器附加到 httpunit ServletRunner 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5014960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com