Ich versuche, einen Komponententest in Spring Boot 1.4 durchzuführen, um zu testen, ob meine Validierung eine 400 für einen ungültigen Abfragezeichenfolgenparameter zurückgibt.Spring Boot 1.4 Komponententest Hibernate Validation WebMvcTest
-Controller
@RestController
@Validated
public class ExampleController {
...
@RequestMapping(value = "/example", method = GET)
public Response getExample(
@RequestParam(value = "userId", required = true) @Valid @Pattern(regexp = MY_REGEX) String segmentsRequest {
// Stuff here
}
}
Exception Handler
@ControllerAdvice
@Component
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
// 400 - Bad Request
@ExceptionHandler(value = {ConstraintViolationException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void constrainViolationHandle(HttpServletRequest request, ConstraintViolationException exception) {
logger.error("Error Bad Request (400)");
}
}
Kontext
@Bean
public Validator validator() {
final ValidatorFactory validatorFactory = Validation.byDefaultProvider()
.configure()
.parameterNameProvider(new ReflectionParameterNameProvider())
.buildValidatorFactory();
return validatorFactory.getValidator();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
final MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator());
return methodValidationPostProcessor;
}
Einheit Test
@RunWith(SpringRunner.class)
@WebMvcTest(ExampleController.class)
public class ExampleControllerTest {
private static final String EMPTY = "";
@Autowired
private MockMvc mvc;
@Test
public void test() throws Exception {
// Perform Request
ResultActions response = this.mvc.perform(
get("/example").param("userId", "invalid")
);
// Assert Result
response.andExpect(status().isBadRequest())
.andExpect(content().string(EMPTY));
}
}
Allerdings, wenn ich meinen Test laufen bekomme ich ein 200
kein 400
. Die Validierung wird nicht durchgeführt, wenn ich als Anwendung nur als Test ausgeführt werde.
Ich glaube, es kann daran liegen, dass die beiden Validierungsbeans beim Ausführen des Tests nicht aufgenommen wurden? Diese Validierung funktioniert
Ich habe das versucht, aber dann bekomme ich 404s – ptimson