小编Geo*_*ava的帖子

Spring-test 集成测试中的自动连线 HttpServletRequest

我正在尝试进行测试以涵盖登录功能。Spring 的版本是 3.2.12。我有一个会话 bean,声明为:

@Service
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public class ClientSessionServiceImpl implements ClientSessionService {
    @Autowired
    private HttpServletRequest request;
    // This method is called during the login routine from the filter
    public boolean checkUser() {
    // I rely on request attributes here, which were set in the filter
    }
Run Code Online (Sandbox Code Playgroud)

这在服务器上运行时效果很好,但是当使用spring-test的方式运行时,问题就来了。这是我的测试方法:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilter(springSecurityFilterChain).build();
mockMvc.perform(post(URL));
Run Code Online (Sandbox Code Playgroud)

经过调试,我发现,当测试 spring 上下文启动时,在 ServletTestExecutionListener.setUpRequestContextIfNecessary 中创建了一个 MockHttpServletRequest 实例,MockHttpServletRequest request = new MockHttpServletRequest(mockServletContext);? // 让我们称这个实例为 A。这是到处注入的实例,我使用

@Autowired
HttpServletRequest request;
Run Code Online (Sandbox Code Playgroud)

而调用 MockMvc.perform 会创建另一个 MockHttpServletRequest 实例(我们称其为实例 B),该实例被传递给所有过滤器、servlet 等。因此,基本上,我在请求中的过滤器中设置的属性不能在 …

java spring spring-mvc spring-test mockmvc

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

mockmvc ×1

spring ×1

spring-mvc ×1

spring-test ×1