java - 如何在 Spring Boot 应用程序中测试 validator ?

标签 java spring spring-boot validation junit

我有一个类:

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

相关文章:

spring - Spring 批的优点

java - Elasticsearch Spring启动

java - 如何在不使用 @JsonIgnore 的情况下解决 (com.fasterxml.jackson.databind) 异常

java - {project.parent.basedir} 采用子模块路径而不是父模块路径

java - 间歇性结果 UPDATE、DELETE、SET 或 GET 语句 : ; ResultSet is empty

spring - Prometheus 端点不工作 Spring Boot 2.0.0.RC1 Spring Webflux 已启用

java - java中集合中元素的顺序

java - 在运行时以编程方式定义和删除 Spring Boot/Spring JPA 数据源?

docker - 从Spring Boot Jar构建Docker镜像

java - Spring boot YAML 配置未读取所有值