У меня есть контроллер, как показано ниже
@GetMapping(value="")
public ResponseEntity<JsonResponse> getLocations(@RequestHeader(value="id") String id, @LocationType @RequestParam(value="locationType" ) String P_STS_AREA_TYP) {
...
return new ResponseEntity<>(response,HttpStatus.OK);
}
@LocationType — это пользовательская аннотация, определение
@Target({ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = LocationTypeValidator.class)
public @interface LocationType {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
он работает отлично, проверьте тип местоположения, когда приложение работает нормально. но когда я попытался протестировать его с помощью Juint, он перестает работать.
@Test
public void should_return_input_invalid_exception_for_invalid_location_type_for_get_location_endpoint() throws Exception {
mockMvc.perform(get("/something/something/something")
.param("locationType", "something")
.header("id", "12345678"))
.andExpect(status().isBadRequest());
}
он проходит проверку и не входит в логику обработки ошибок, как это происходит, когда приложение работает нормально с тем же параметром запроса типа местоположения.
аннотации, используемые в тестовом классе
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { something.class, something.class})
mockito как фиктивный фреймворк
кто-нибудь знает, как заставить пользовательскую аннотацию работать в Junit?
@Plog, мое определение валидатора
public class LocationTypeValidator implements ConstraintValidator<LocationType, String> {
@Autowired
InputValidator inputValidator;
@Override
public void initialize(LocationType locationType) {
}
@Override
public boolean isValid(String locationType, ConstraintValidatorContext constraintValidatorContext) {
return inputValidator.validateLocationType(locationType);
}
}
я не могу установить Validator, так как он не реализует интерфейс Validator