Custom ConstraintValidator中的Spring @Value问题用于单元测试

时间:2019-03-18 18:39:17

标签: java spring junit

我正在使用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方法中收到了空指针异常。

我想念什么?

预先感谢

0 个答案:

没有答案