首页 > 解决方案 > 如何在 Spring 4.1.7 中将模拟注入自定义 ConstraintValidator?

问题描述

我正在使用 Spring 4.1.7 开发应用程序,并且正在使用带有独立上下文配置的 mockMvc 执行一些单元测试。我想测试提交表单的控制器方法。

问题是表单中的某些字段使用自定义验证注释进行注释,并且负责验证的 ConstraintValidator 需要我想模拟的其他依赖项。我该怎么做?

验证器的代码如下:

public class EmailValidator implements ConstraintValidator<CorrectEmail, Object> {

    @Autowired
    private ConfigurationManager configurationManager;

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
        String pattern = configurationManager.getPattern();
        //performing checks
    }
}

测试代码如下:

@UnitTest
@RunWith(MockitoJUnitRunner.class)
public class RegisterPageControllerUnitTest {

    private MockMvc mockMvc;

    @InjectMocks
    private Controller controller;

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

    @Test
    public void sdlkjf() throws Exception {
        mockMvc.perform(post("/register")
            .contentType(MediaType.APPLICATION_FORM_URLENCODED)
            .param("email", "email@gmail.com"));
}
}

当我尝试运行我的测试时,我得到了NullPointerException因为configurationManager没有注入。

标签: springjunitmockitobean-validationmockmvc

解决方案


推荐阅读