2011-06-22 47 views
0
@Autowired 
private Validator validator; 

    @Test 
     public void testValidateMethodOfPaymentBadCreditCard() { 
      final MethodOfPayment mop = new MethodOfPayment(); 
      command.setDescription("1234567890"); 
      final Set<ConstraintViolation<MethodOfPayment>> constraintViolations = this.validator.validateProperty(mop, "cardNumber", Default.class); 
      Assert.assertFalse(constraintViolations.isEmpty()); 
      for (final ConstraintViolation<MethodOfPayment> cv : constraintViolations) { 
       Assert.assertEquals(cv.getMessage(), "{error.invalid.cardNumber}"); 
      } 
     } 

单位类在我的xml中有define的实例。休眠验证器4.2.0最终@CreditCardNumber

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

我methodofpayment标注有

@CreditCardNumber(message="{error.invalid.cardNumber}") 
    public String getCardNumber() { 
     return this.cardNumber; 
    } 

上线说违反约束为空,此测试失败。我认为它不应该是空的吗?

出了什么问题? 什么样的数据无法进行信用卡验证?

回答

0

null被认为是Bean Validation和Hibernate Validator中定义的大多数约束的有效值。

因此,如果你没有一个值分配给cardNumber财产或@NotNull标注它,你不会得到一个违反约束(顺便说一句,你似乎上市有点奇怪,来自哪里command?)

@CreditCardNumber的验证器使用Luhn algorithm来检查信用卡号码。

+0

嗨,命令应该是mop.setDescription。是的,谢谢你指出错误。我设置的描述不是卡号,因此它从未被验证过。 –