Ich arbeite an dem Kapitel 5 Beispiel des Buches Frühling in Aktion 4. Wenn ich die Test-Klassen ausgeführt habe, fand ich einen der @Valid Test nicht funktioniert, es scheint, als ob Die Validierung ist nie erfolgt (der Statuscode 302 wurde zurückgegeben und der Name der Ansicht lautet "/ spitter/null"). Es funktioniert jedoch einwandfrei, wenn ich es in Tomcat starte.Test @Valid Annotation mit SpringMVC Maven
Die Validatio-Gläser (Hibernate-Validator und seine Abhängigkeiten) werden mit Maven geladen.
Das ganze Projekt ist auf github.
Irgendwelche Ideen?
Test Code-Schnipsel:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={RootConfig.class, WebConfig.class})
public class SpitterControllerTest {
@Test
public void shouldFailValidationWithNoData() throws Exception {
SpitterRepository mockRepository = mock(SpitterRepository.class);
SpitterController controller = new SpitterController(mockRepository);
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(post("/spitter/register"))
.andExpect(status().isOk())
.andExpect(view().name("registerForm"))
.andExpect(model().errorCount(5))
.andExpect(model().attributeHasFieldErrors(
"spitter", "firstName", "lastName", "username", "password", "email"));
}
}
SpitterController Schnipsel:
@RequestMapping(value="/register", method=POST)
public String processRegistration(
@Valid Spitter spitter,
Errors errors) {
if (errors.hasErrors()) {
return "registerForm";
}
spitterRepository.save(spitter);
return "redirect:/spitter/" + spitter.getUsername();
}
Spitter-Schnipsel:
@NotNull
@Size(min=5, max=16)
private String username;
@NotNull
@Size(min=5, max=25)
private String password;
@NotNull
@Size(min=2, max=30)
private String firstName;
@NotNull
@Size(min=2, max=30)
private String lastName;
@NotNull
@Email
private String email;
Vielen Dank!
Ist die Verwendung von StandaloneSetup erforderlich? Haben Sie stattdessen webAppContextSetup in Betracht gezogen? –
Ich habe gerade webAppContextSetup ausprobiert und eine '' 'org.springframework.dao.DataIntegrityViolationException''' geworfen, weil das Einfügen von null für den Spalten-Benutzernamen nicht erlaubt ist.Trotzdem ist die '' '@ Valid'' Validierung nicht aufgetreten. Wenn es gültig ist, sollte die Ausnahme nicht ausgelöst worden sein. – fall