如何使用 MockMVC 在 ConstraintValidator 中注入 bean?

osc*_*car 5 junit spring spring-mvc mockito

我有一个自定义 ConstraintValidator:

@Component
public class FooValidator implements ConstraintValidator<FooAnnotation, String> {

    @Inject
    private FooRepository fooRepository;

    @Override
    public void initialize(FooAnnotation foo) {
    }

    @Override
    public boolean isValid(String code, ConstraintValidatorContext context) {

        Foo foo = fooRepository.findByCode(code);
        //My code
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的 Junit 测试和 MockMVC 中,我调用了 url,但 fooRepository bean 验证器始终为 null。

如何将其注入我的测试控制器中?我尝试创建一个模拟存储库,但它也是空的。我的源码测试:

public class FooControllerTest {

    @InjectMocks
    private FooController fooController;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        // Process mock annotations
        MockitoAnnotations.initMocks(this);

        // Setup Spring test in standalone mode
        this.mockMvc = MockMvcBuilders.standaloneSetup(fooController)
                .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
                .build();
    }   

    @Test
    public void testSave() throws Exception {
        Foo foo = new Foo();
        // given
            //My code...
        // when
        // then

        // with errors
        this.mockMvc.perform(post("/foo/update")
                .param("name", "asdfasd")
                .sessionAttr("foo", foo))
                .andExpect(model().hasErrors())
                .andExpect(model().attributeHasFieldErrors("foo", "name"));
    }
}
Run Code Online (Sandbox Code Playgroud)

agl*_*ina -2

除其他事项外,您应该将 @ContextConfiguration 添加到您的测试中。