我正在使用Spring 4.1.6.RELEASE版本。我有以下自定义ConstraintValidator。
public class CountryCodeValidator implements ConstraintValidator<CountryCode, String> {
private List<String> allowedCountries;
@Autowired
public void setAllowedCountries(@Value("${allowed.countries}")String countries) {
allowedCountries = Arrays.asList(countries.split(","));
}
@Override
public void initialize(CountryCode constraintAnnotation) { }
@Override
public boolean isValid(String countryCode, ConstraintValidatorContext ctx) {
return null != countryCode && allowedCountries.contains(countryCode.toUpperCase());
}
}
我有以下注释
@Documented
@Constraint(validatedBy = CountryCodeValidator.class)
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CountryCode {
String message() default "{CountryCode}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
我正在如下所示的请求对象中使用它
@CountryCode(message = MessageKeys.COUNTRY_CODE_INVALID)
private String countryCode;
当我运行该应用程序时,一切都按预期工作。但是,在控制器的单元测试中,它失败了。
我的单元测试代码如下所示
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/test-context.xml")
public class ControllerTest {
@InjectMocks
private Controller controller;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testEndpoint() {
Request request = new Request();
RestAssuredMockMvc.given().standaloneSetup(controller).contentType(MediaType.APPLICATION_JSON_VALUE).body(request)
.post("/endpoint").then().statusCode(HttpStatus.OK.value());
}
}
运行代码时,我无法获得 @Value(“ $ {allowed.countries}”),因此我在isValid方法中收到了空指针异常。
我想念什么?
预先感谢