繁体   English   中英

如何在Spring Boot应用中测试验证器?

[英]How can I test a validator in a Spring Boot app?

我有一堂课:

@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对象传递给验证器。 还有其他办法吗?

您是否尝试过为此编写简单的单元测试?

@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 API

您的设置可以包含在上面的类中。

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();
}

使用org.springframework.validation.BeanPropertyBindingResult类,

Errors newErrors = new BeanPropertyBindingResult(validateObject, "objectName");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM