Как я могу проверить валидатор в приложении Spring Boot? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть класс:

@Component
public class ContractorFormValidator implements Validator {

    Logger logger = LoggerFactory.getLogger(ContractorFormValidator.class);

    @Inject IBusinessDataValidator businessDataValidator;

    @Override
    public boolean supports(Class<?> clazz) {
        return Contractor.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        Contractor contractor = (Contractor) target;
        if (!businessDataValidator.isNipValid(contractor.getContractorData().getNip())) {
            errors.rejectValue("contractorData.nip", "invalid");
        }
        if (!businessDataValidator.isRegonValid(contractor.getContractorData().getRegon())) {
            errors.rejectValue("contractorData.regon", "invalid");
        }
    }
}

Как я могу это проверить?Я пробовал это: Как проверить аннотации проверки класса с помощью JUnit? , но это не работает, потому что метод validate в моем валидаторе требует Errors класса, переданного в его сигнатуру метода.

Я понятия не имею, могу ли я передать этот Errors объект в валидатор.Есть ли другой способ?

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Вы пытались написать для этого простой модульный тест?

@RunWith(SpringJUnit4ClassRunner.class)
public class ContractorFormValidatorTest {

  @Autowired
  private ContractorFormValidator validator;

  @Test
  public void testValidation() throws Exception {
    Contractor contractor = new Contractor();
    // Initialise the variables here.

    Errors errors = new BeanPropertyBindingResult(contractor, "contractor");
    validator.validate(contract, errors);

    // If errors are expected.
    Assert.assertTrue(errors.hasErrors());

   for (Error fieldError : errors.getFieldErrors()) {
       Assert.assertEquals("contractorData.nip", fieldError.getCode());
   }
  }
}

Если вы собираетесь использовать валидатор в реализации контроллера, тогда вам нужно использовать MockMvc apis

Ваша установка может быть включена в класс выше.

private MockMvc mockMvc

@Autowired
private MyController controller;

@Before
public void setUp() throws Exception {
  this.mockMvc = MockMvcBuilders.standaloneSetup(this.controller).build();
}

@Test
public void testMethod() {
   MvcResult result = this.mockMvc.perform(MockMvcRequestBuilders.post("/yoururl")).
    andExpect(MockMvcResultMatchers.status().isCreated()).andReturn();
}
0 голосов
/ 25 апреля 2019

Используйте класс org.springframework.validation.BeanPropertyBindingResult,

Errors newErrors = new BeanPropertyBindingResult(validateObject, "objectName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...