SpringBootTest MockMVC绑定session 验证码
时间: 2023-09-28 18:05:15 浏览: 189
SpringBoot实现验证码功能
在使用MockMVC进行测试时,如果需要绑定session来存储验证码,可以使用`MockHttpSession`类来模拟session。下面是一个示例代码:
```java
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class CaptchaControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testGenerateCaptcha() throws Exception {
// 创建MockHttpSession对象
MockHttpSession session = new MockHttpSession();
// 发送GET请求,生成验证码并将验证码存储到session中
mockMvc.perform(get("/captcha/generate").session(session))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.IMAGE_PNG))
.andExpect(header().string("Cache-Control", "no-cache, no-store, must-revalidate"))
.andExpect(header().string("Pragma", "no-cache"))
.andExpect(header().string("Expires", "0"));
// 从session中获取验证码
String captcha = (String) session.getAttribute("captcha");
// 发送POST请求,验证验证码
mockMvc.perform(post("/captcha/verify")
.param("captcha", captcha)
.session(session))
.andExpect(status().isOk())
.andExpect(content().string("true"));
}
}
```
在上面的示例中,我们首先创建了一个`MockHttpSession`对象,并将其传递给GET请求的`session()`方法。这样就可以在session中存储验证码了。接着,我们从session中获取验证码,并将其作为参数传递给POST请求的`param()`方法。最后,我们可以验证验证码验证的结果是否正确。
阅读全文