如何在Spring Boot测试中模拟BindingResult?

时间:2019-11-04 14:14:29

标签: spring-boot

在TestClass中,我添加了@Import(MandatairesFormValidator.class) 当我模拟控制器时,我可以进入控制器内部,但无法按以下建议访问方法validate.validate():How to mock BindingResult in Spring Boot Test

控制器为:

 @PatchMapping(value = "/{id}", consumes = APPLICATION_JSON_UTF8_VALUE, produces = APPLICATION_JSON_UTF8_VALUE)
  ResponseEntity<Object> modifierDonnees(@PathVariable final Long id,
    @Valid @RequestBody final ModificationUI modificationUI, BindingResult bindingResult) {
        validator.validate(modificationUI, bindingResult);
        if (bindingResult.hasErrors()) {
            List<String> errors = bindingResult.getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.toList());
            throw new MandataireValidationException(errors);
        }
}

UnitTestController:

@RunWith(MockitoJUnitRunner.class) 公共类ControllerTest {

ResultActions resultActions = mockMvc.perform(patch(URL_RACINE_CTRL + "/1").contentType(APPLICATION_JSON_UTF8_VALUE)
        .content(
                "{\"modificationMandataire\":{\"mandataireOrigine\":{}, " +
                        "\"mandataireSoustraction1\":{}, " +
                        "\"mandataireSoustraction2\":{}}}")).andExpect(MockMvcResultMatchers.status().isBadRequest());

使用:@Import(MandatairesFormValidator.class)Controller中的验证器为null; 使用:@Mock     私人MandatairesFormValidator mandatairesFormValidator;它跳过了'validator.validate()'方法->  BindingResult bindingResult =模拟(BindingResult.class);         when(bindingResult.hasErrors())。thenReturn(true);

验证者:

@Component
public class MandatairesFormValidator implements Validator {

    public static final String international_number="(0{1,2}|\\+\\d{2,})(-|\\.|\\s*|\\d*)*";


    public boolean supports(Class<?> clazz) {
        return ModificationUI.class.isAssignableFrom(clazz);
    }

    private Boolean isValidNatel(String telephone){
        return Objects.nonNull(telephone) && (telephone.matches(international_number));
    }

    public void validate(Object o, Errors errors) {

        ModificationUI modificationUI = (ModificationUI) o;
        ModificationMandataireUI modificationMandataire = modificationUI.getModificationMandataire();

        MandataireSoustractionUI mandataireSoustractionUI1 = modificationAffaireMandataire.getMandataireSoustraction1();
        MandataireSoustractionUI mandataireSoustractionUI2 = modificationAffaireMandataire.getMandataireSoustraction2();


        Boolean isValidNatel1 = (Objects.nonNull(mandataireSoustractionUI1) && isValidNatel(mandataireSoustractionUI1.getTelephone()) || Objects.isNull(mandataireSoustractionUI1));
        Boolean isValidNatel2 = (Objects.nonNull(mandataireSoustractionUI2)  && isValidNatel(mandataireSoustractionUI2.getTelephone()) || Objects.isNull(mandataireSoustractionUI2));


        if ( !isValidNatel1 ) {
            String telephone1=mandataireSoustractionUI1.getTelephone();
            String msg1= Objects.nonNull(telephone1) ? telephone1 : "";
            errors.reject("telephone", "Téléphone 1 " + msg1 +" pas valide");
        }
        if (  !isValidNatel2  ) {
            String telephone2=mandataireSoustractionUI2.getTelephone();
            String msg2= Objects.nonNull(telephone2) ? telephone2 : "";
            errors.reject("telephone", "Téléphone 2" + msg2 + " pas valide");
        }
    }
}`

我尝试使用

0 个答案:

没有答案