2013-10-18 2 views
0

코드 범위를 향상시키기 위해 wsdl에서 생성 된 Pojo 클래스를 테스트하려고하는데 해결 방법을 모르는 문제가 있습니다.OpenPojo JUnit 유효성 검사 필드 이름 약어 약어

생성 된 클래스는 다음과 같습니다 : 그것은 뽀조 검사기처럼 보이는

public class NOF implements java.io.Serializable {  

    private java.lang.String nOFName;  

    public java.lang.String getNOFName() { 
    return this.nOFName; 
    } 

    public void setNOFName(java.lang.String nOFName) { 
    this.nOFName = nOFName; 
    } 

} 

올바르게 게터 getNOFName에 변수 이름 nOFName을 번역하지 않고 (내가 무엇을 모르는 대신 다른 뭔가를 찾습니다). 내가 NOFName에 변수의 이름을 변경하면

java.lang.AssertionError: [PojoFieldImpl [field=private java.lang.String 
mypackage.NOF.nOFName, fieldGetter=null, fieldSetter=null]] is missing a getter 

이 테스트를 통과 : 내가 얻을 예외는 이것이다. nofName으로 변경하고 이름 바꾸기 방법을 getNofName으로 변경하면 작동합니다. 나는 문제가 약어로 만들어진 이름에 있다는 것을 알고 있지만, 생성 된 클래스를 변경하고 싶지는 않습니다. 왜냐하면 미래에 재생성 될 수 있기 때문입니다. 맞춤 검사기를 작성해야합니까? 나는 somoene이 문제를 다루었 음에 틀림 없다고 생각한다. (openpojo 검증을위한 완벽한 유스 케이스라고 생각하기 때문이다.) 그러나 나는 아무것도 발견하지 못했다.

시험은 다음과 같습니다

public class PojoTest { 
    @Test 
    public void testPojo() throws Exception{ 
     PojoValidator validator = new PojoValidator(); 
     validator.addRule(new GetterMustExistRule()); 
     validator.addRule(new SetterMustExistRule()); 
     validator.addTester(new GetterTester()); 
     validator.addTester(new SetterTester()); 
     for (PojoClass cls: PojoClassFactory.getPojoClasses("mypackage")){ 
      validator.runValidation(cls); 
     } 
    } 
} 

편집 나는 openpojo 라이브러리를 디버깅 한 그것은 getnOFName 검색하고 내가 수정을 제외하고 그것에 대해 할 라이브러리를 다시 컴파일 할 수 아무것도 :(

답변

2

해결 방법은 간단하지 않지만 매우 쉽습니다. Pojo 유효성 검사 라이브러리를 조롱해야합니다. (여전히 그 아이디어를 웃으며). 다음은 작동 코드입니다.

@RunWith(PowerMockRunner.class) 
@PrepareForTest(AttributeHelper.class) 
public class PojoTest { 
    static PojoValidator validator; 

    @BeforeClass 
    public static void setUpClass(){ 
     validator = new PojoValidator(); 
     validator.addRule(new GetterMustExistRule()); 
     validator.addRule(new SetterMustExistRule()); 
     validator.addTester(new GetterTester()); 
     validator.addTester(new SetterTester()); 
    } 

    @Before 
    public void setUp(){ 
     PowerMockito.replace(method(AttributeHelper.class, "formattedFieldName")).with(method(PojoTest.class, "formattedFieldName")); 
    } 

    @Test 
    public void testPojo() throws Exception { 
     for (PojoClass cls: PojoClassFactory.getPojoClasses("mypackage")){ 
       validator.runValidation(cls); 
     } 
    } 

    private static final List<String> fieldPrefixes = new LinkedList<String>(); 

    private static String formattedFieldName(final String fieldName) { 
     return fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1, fieldName.length()); 
    } 
} 

wsdl2java가 PojoValidator보다 Java Beans 표준 (유추 된 이름)의 해석이 다릅니다. 라이브러리에서 하나의 정적 메서드를 대체해야했습니다.