gpt4 book ai didi

由于某些奇怪的原因,Spring MVC 测试 3.2.2 失败了 "flash().attributeExists"断言

转载 作者:行者123 更新时间:2023-12-04 04:39:55 25 4
gpt4 key购买 nike

我正在测试以下 Spring MVC Controller 方法 :

@RequestMapping(value = "/passwordReset", method = RequestMethod.POST, produces = "text/html")
public String resetPassword(@Validated({ ValidationGroups.PasswordReset.class }) @ModelAttribute PasswordInfo passwordInfo,
BindingResult bindingResult, Model model, RedirectAttributes redirectAttributes, Locale locale) {
if (bindingResult.hasErrors()) {
model.addAttribute("passwordInfo", passwordInfo);
return "passwordReset";
}
redirectAttributes.addFlashAttribute("message", messageSource.getMessage("controller.preference.password_reset_ok", null, locale));
Member member = preferenceService.findMemberByToken(passwordInfo.getToken());
preferenceService.modifyPassword(member, passwordInfo.getNewPassword());
signinService.signin(member);
return "redirect:/preference/email";
}

这是我的 测试方法 :
@Test
public void resetPasswordShouldHaveNormalInteractions() throws Exception {
Member member = new Member();
when(preferenceService.findMemberByToken(eq("valid-token"))).thenReturn(member);
mockMvc.perform(post("/preference/passwordReset")//
.param("newPassword", "valid-password")//
.param("token", "valid-token"))//
.andDo(print())
.andExpect(redirectedUrl("/preference/email"))//
.andExpect(flash().attributeExists("message"))//FAILS HERE
.andExpect(flash().attributeCount(1));
verify(preferenceService).modifyPassword(eq(member), eq("valid-password"));
verify(signinService).signin(eq(member));
}

即使在重定向属性映射中添加了“message” flash 属性,Spring MVC 测试似乎也没有注意到它和上面的行 FAILS HERE系统地未通过测试!

你可以亲眼看到 message flash 属性确实在 FlashMap 中 (见 doPrint() )如下:
MockHttpServletRequest:
HTTP Method = POST
Request URI = /preference/passwordReset
Parameters = {newPassword=[valid-password], token=[valid-token]}
Headers = {}

Handler:
Type = com.bignibou.controller.preference.PreferenceController
Method = public java.lang.String com.bignibou.controller.preference.PreferenceController.resetPassword(com.bignibou.controller.preference.PasswordInfo,org.springframework.validation.BindingResult,org.springframework.ui.Model,org.springframework.web.servlet.mvc.support.RedirectAttributes,java.util.Locale)

Async:
Was async started = false
Async result = null

Resolved Exception:
Type = null

ModelAndView:
View name = redirect:/preference/email
View = null
Model = null

FlashMap:
Attribute = message
value = null

MockHttpServletResponse:
Status = 302
Error message = null
Headers = {Location=[/preference/email]}
Content type = null
Body =
Forwarded URL = null
Redirected URL = /preference/email
Cookies = []

有人可以帮忙吗?仅供引用,我使用 Spring 3.2.2。

最佳答案

如 doPrint() 的输出所示,FlashMap 包含一个值为 null 的属性“message”。

.andExpect(flash().attributeExists("message"))

电话 attributeExists()FlashAttributeResultMatcher 上但它只检查是否有 不为空 属性:
/**
* Assert the existence of the given flash attributes.
*/
public <T> ResultMatcher attributeExists(final String... names) {
return new ResultMatcher() {
public void match(MvcResult result) throws Exception {
for (String name : names) {
assertTrue("Flash attribute [" + name + "] does not exist", result.getFlashMap().get(name) != null);
}
}
};
}

因此断言失败。

关于由于某些奇怪的原因,Spring MVC 测试 3.2.2 失败了 "flash().attributeExists"断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19051954/

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