2014-04-26 4 views
2

내 모델 중 일부에 대한 테스트 클래스를 설정하기 위해 spring, hibernate 및 junit을 사용하고 있습니다. 내 모델의자바 제네릭? extends Clazz

모든 BASEMODEL

을 확장 I 내 테스트 클래스에서 다음과 같은 기능이 있습니다

void printValidation(Set<ConstraintViolation<? extends BaseModel>> v){ 
     Iterator<ConstraintViolation<? extends BaseModel>> it = v.iterator(); 
     while (it.hasNext()) { 
      ConstraintViolation<? extends BaseModel> violation = it.next(); 
      l.info("Validation error {}", violation); 
     } 
    } 

내가 테스트 케이스 안쪽과 같이 사용 :

eModel = new Entry(); //This class extends BaseModel 
Set<ConstraintViolation<? extends BaseModel>> v = validator.validate(eModel); 
assertTrue("There should be validation errors...", v.size() > 0); 
printValidation(v); 

에게 그러나 Eclipse에서 다음 메시지가 나타나며 작동하지 않는 것 같습니다. 형식 불일치 : Set<ConstraintViolation<Entry>> (으)로 변환 할 수 없습니다. to Set<ConstraintViolation<? extends BaseModel>>

나는 많은 기능을 가지고 있는데, 만약이 기능이 <? extends BaseEntry> 대신에 <Entry>이된다. 나는 이것을 테스트하고있는 많은 모델을 가지고 있으며, 이것을 복제 할 필요가없는 일반적인 제네릭의 요점이다.

여기서 내가 무엇을 놓치고 있는지, 나는 validator.validate가 반환하는 것과 관련이 있다고 생각합니까?

** void <T extends BaseModel> printValidation(Set<ConstraintViolation<T>> v)

답변

0

인라인 코드 서식 수정 편집 - 거의 여기에 작업 코드 :

<T extends BaseModel> void printValidation(Set<ConstraintViolation<T>> v){ 
    Iterator<ConstraintViolation<T>> it = v.iterator(); 
    while (it.hasNext()) { 
     ConstraintViolation<T> violation = it.next(); 
     l.info("Validation error {}", violation); 
    } 
} 

그리고 테스트를 수행하는 기능을 :

@Test 
public void testEntry() { 
    Set<ConstraintViolation<Entry>> v = validator.validate(eModel); 
    assertTrue("There should be validation errors...", v.size() > 0); 
    printValidation(v); 
+0

거의 도움을 주셔서 감사합니다. – mikeb

+0

네 말이 맞아! 나는 빠른 것에 조금 타이프했다! !! – geoand

+0

질문의 미래 시청자를 혼동하지 않도록 내 답변을 업데이트했습니다. 댓글 주셔서 감사합니다. – geoand