我有一个类:
@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");
}
}
}
我该如何测试它?我试过这个:How to test validation annotations of a class using JUnit?但这不起作用,因为我的 validator 中的 validate
方法需要将 Errors
类传递给它的方法签名。
我不知道是否可以将此 Errors
对象传递给 validator 。还有其他办法吗?
最佳答案
您是否尝试过为此编写一个简单的单元测试?
@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());
}
}
}
如果您要在 Controller 实现中使用 validator ,那么您需要使用 MockMvc api
您的设置可以包含在上面的类(class)中。
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();
}
关于java - 如何在 Spring Boot 应用程序中测试 validator ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55855740/