I\'m writting my application using Spring MVC.
I want to validate is e-mail exists in database when user is registering. I\'ve written my own annotation constraint named
If your main code is working, then it should be straight forward to get your test working. You need to use @ContextConfiguration on your test class, see this for more details: http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html
In general, there are 2 ways to test this:
For unit test, you need to create an instance of the UniqueEmailValidator and set a UserService on that instance (normally a mock UserServer).
For integration test, you need to have the spring context initialized as I mentioned above.
Don't you have a Validator configured in your bean context. If you are bootstrapping Validator via Validation.buildDefaultValidatorFactory(); you are bypassing the Spring mechanism and you get a Validator which is not aware of Spring beans and components. Hence injection is not working. In your test you want to get hold of the Spring provided Validator.
You can call injection all @Autowired service:
@Override
public void initialize(UniqueEmail uniqueEmail) {
org.springframework.web.context.support.SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}