2011-06-22 41 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。是的,謝謝你指出錯誤。我設置的描述不是卡號,因此它從未被驗證過。 –