Java 来自缩写的OpenPojo JUnit验证字段名称

Java 来自缩写的OpenPojo JUnit验证字段名称,java,web-services,junit,pojo,Java,Web Services,Junit,Pojo,我试图测试从wsdl生成的Pojo类以提高代码覆盖率,但我面临一个我不知道如何解决的问题 生成的类如下所示: public class NOF implements java.io.Serializable { private java.lang.String nOFName; public java.lang.String getNOFName() { return this.nOFName; } public void setNOFN

我试图测试从wsdl生成的Pojo类以提高代码覆盖率,但我面临一个我不知道如何解决的问题

生成的类如下所示:

 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;
   }

 }
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);
        }
    }
}
Pojo验证器似乎没有正确地将变量名
nOFName
转换为getter
getNOFName
,而是查找其他内容(我不知道是什么)。我得到的例外是:

java.lang.AssertionError: [PojoFieldImpl [field=private java.lang.String 
mypackage.NOF.nOFName, fieldGetter=null, fieldSetter=null]] is missing a getter
当我将变量名更改为
NOFName
时,测试通过。如果我将其更改为
nofName
,并将方法重命名为
getNofName
,它也可以工作。我知道问题出在缩写的名称上,但我真的不想更改生成的类,因为它们将来可能会重新生成。 我是否需要编写自定义验证器?我猜somoene以前一定处理过这个问题(因为我认为这是openpojo验证的一个完美用例),但我没有发现任何东西

测试如下所示:

 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;
   }

 }
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
,除了修复和重新编译库之外,我无能为力:(

解决方案不是很简单,但相当简单。我不得不模仿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());
    }
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(AttributeHelper.class)
公共类PojoTest{
静态PojoValidator;
@课前
公共静态void setUpClass(){
validator=新的PojoValidator();
addRule(新的gettermustxistrule());
addRule(新的SetterMustExistRule());
addTester(新的GetterTester());
addTester(新的SetterTester());
}
@以前
公共作废设置(){
用(方法(PojoTest.class,“formattedFieldName”))替换(方法(AttributeHelper.class,“formattedFieldName”));
}
@试验
public void testPojo()引发异常{
对于(PojoClass cls:PojoClassFactory.getPojoClasses(“mypackage”)){
验证程序。运行验证(cls);
}
}
private static final List fieldPrefixes=new LinkedList();
私有静态字符串formattedFieldName(最终字符串字段名){
返回fieldName.substring(0,1.toUpperCase()+fieldName.substring(1,fieldName.length());
}
}
问题是wsdl2java对JavaBeans标准(推断名称)的解释与PojoValidator不同