2012-11-20 1 views
2

JUnit 테스트에서 bean 유효성 검사를 사용하여 엔티티의 유효성을 검사하려고합니다. 설정 으로 보이지만 테스트가 실패하지 않습니다. 따라서 엔티티가 올바르게 검증되지 않은 것 같습니다.JUnit에서 bean 유효성 검사 (JSR-303)를 올바르게 사용하는 방법은 무엇입니까?

@Column(name = "mobile_numbers", table = STN) 
private String smsRecipientMobileNumbers; 

열은 (데이터베이스에 올바르게 적용되는) 255 개 문자의 기본 크기를 가져옵니다

여기에 관련 JPA 주석입니다.

final Collection<String> recipients = new ArrayList<String>(2000); 
    for (int i = 0; i < 2000; i++) { 
    recipients.add("some mobile number"); 
    } 
    objectUnderTest.setSmsRecipients(recipients); 

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 
    violations = validator.validate(objectUnderTest, Default.class); 
    assertThat(violations, is(empty())); 
} 

나는 smsRecipientMobileNumbers 255 개 문자 이상 방법이지만이 통과하기 때문에 실패 할 것으로 예상 :

여기 테스트입니다.

내가 명시 적으로 테스트가 실패 엔터티의 크기 제한을 적용하는 경우 :

@Column(name = "mobile_numbers", table = STN) 
@Size(max = 255) 
private String smsRecipientMobileNumbers; 

내가 잘못 여기서 뭐하는 거지? 분명히 선택한 공급자는 JPA 주석을 올바르게 해석 할 수 있어야합니다. 유효성 검사기는 org.hibernate.validator.engine.ValidatorImpl의 인스턴스입니다.

답변

3

Bean 유효성 검사는 JPA 엔티티 (또는 기본 열 크기)를 고려하지 않습니다. 빈 유효성 검사를 사용하여 길이의 유효성을 검사하려면 @Size 제약 조건을 추가해야합니다.

JPA 제공자는 DDL 문을 작성할 때 제약 사항을 선택적으로 고려할 수 있습니다. 예를 들어 Hibernate ORM은 max 속성의 열 길이를 @Size으로 설정해야합니다.

+0

"선택적으로 DDL 문을 만들 때 제약 조건을 고려합니다."... 실제로는 이것이 필수적이라고 생각했습니다. 그렇지 않으면 나에게 이해가되지 않는다. –

+0

"Bean 유효성 검사는 JPA 엔티티 (또는 기본 열 크기)를 고려하지 않습니다."... Hhmm, ok, 즉 크기 제한 위반은 유효성 검사기가 아닌 데이터베이스에서만 탐지됩니다. –