ich einen Komponententest basiert auf den folgenden Teil des Codes auszuführen haben:Spring MVC: Wie verschachtelte Objekteigenschaften in der @ModelAttribute binden
@RequestMapping(value = "/changePass", method = RequestMethod.POST)
public ModelAndView changePass(@ModelAttribute(TAPPLICATION) AppBean applicationBean, BindingResult result, ModelMap model, Principal principal, HttpServletRequest request) throws NSException, SQLException {
// ...
if (applicationBean != null
&& applicationBean.getChangePassDto() != null
&& StringUtils.isNotEmpty(applicationBean.getChangePassDto().getNewPassword())) {
String newPassword = applicationBean.getChangePassDto().getNewPassword();
// ...
}
// ...
Die AppBean enthält folgende Getter und Setter:
private ChangePassDto changePassDto;
public ChangePassDto getChangePassDto() {
return changePassDto;
}
public void setChangePassDto(ChangePasswordDto changePassDto) {
this.changePassDto = changePassDto;
}
Grundsätzlich, wenn ich die Testeinheit auszuführen ist die Methode applicationBean.getChangePassDto()
null
applicationBean
aber nicht null ist. Wie kann ich die applicationBean.getChangePassDto()
initialisieren, so dass sie null
nicht zurückgibt? Ich habe die anderen Nicht-Objekt-Parameter mit der .param
-Methode initialisiert, wie es in meinem Komponententest zu sehen ist.
Ich verwende auch Powermock als Unit-Test-Framework.
Hier finden Sie einen Teil meines Unit-Tests:
@Before
public void setup() {
request = new MockHttpServletRequest();
request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
response = new MockHttpServletResponse();
session = new MockHttpSession();
request.setSession(session);
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
//Added viewResolver to prevent circular view path error
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
this.mockMvc = MockMvcBuilders.standaloneSetup(appController).setViewResolvers(viewResolver).build();
}
@Test
public void changePass_ExpectC() throws Exception {
PowerMockito.doNothing().when(passwordVal).validate(any(User.class), anyListOf(Params.class), any(Object.class),any(Errors.class));
mockMvc.perform(post("/changePass").param("userLogName", "JOHN").param("userLogged", "userLogged").param("password", "password123").param("newPassword", "newPassword123").param("confirmNewPassword", "newPassword123"))
.andExpect(view().name(Constants.DENIED))
.andExpect(status().isOk()
);
}
Jede Idee, wie ich applicationBean.getchangePassDto()
intitialise kann, so dass es nicht null ist?
Vielen Dank im Voraus für Hilfe.
Hallo, ich habe eine Frage bitte, wenn ich den neuen ChangePassDto() Teil in meiner AppBean, Feder nicht die ChangePassDto Instanz verwalten, da es nicht von Frühling geladen wird? – user1999453
In diesem Szenario muss Spring Ihr DTO nicht verwalten. Es muss lediglich die Anforderungsparameter an die Eigenschaften Ihres DTO binden. Ich werde meine Antwort entsprechend aktualisieren. –