gpt4 book ai didi

java - HttpSession 联合测试

转载 作者:行者123 更新时间:2023-12-02 00:47:53 29 4
gpt4 key购买 nike

我无法在 HttpSession 上进行模拟。测试方法如下:

@GetMapping
@RequestMapping("/feed")
public String feed(HttpSession session, Model model) throws UnauthorizedException {
if (session.getAttribute("loginStatus") == null) throw new UnauthorizedException("You have to login first");
Long userId = (Long) session.getAttribute("userId");
model.addAttribute("posts", postService.feed(userId));
return "posts/feed";
}

测试如下所示:

 @Mock
private PostService postService;

private MockMvc mockMvc;

private PostViewController controller;

@Mock
private HttpSession session;


@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
controller = new PostViewController(postService);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}

@Test
public void feed() throws Exception {
when(session.getAttribute("loginStatus")).thenReturn(true);

mockMvc.perform(get("/feed"))
.andExpect(status().isOk())
.andExpect(view().name("posts/feed"))
.andExpect(model().attributeExists("posts"));
}

我总是得到 UnauthorizedException,但我需要避免它。如何为 session 添加一些参数来模拟工作?

最佳答案

在配置 MockHttpServlet 时,您应该使用相关的 session 方法来配置 session 状态。在内部,它会为 MockHttpServlet 创建一个 MockHttpSession > 您正在构建。

 mockMvc.perform(get("/feed")
.sessionAttr("loginStatus", true)
.sessionAttr("userId", 1234l))
.andExpect(status().isOk())
.andExpect(view().name("posts/feed"))
.andExpect(model().attributeExists("posts"));

关于java - HttpSession 联合测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57883910/

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