0

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

 }

Pojo Validator が変数名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 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、ライブラリを修正して再コンパイルする以外にできることはありません:(

4

1 に答える 1

2

解決策はそれほど簡単ではありませんが、非常に簡単です。Pojo Validation ライブラリをモックする必要がありました (私はまだその考えを笑っています)。作業コードは次のとおりです。

@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 標準の解釈 (推測された名前) を持っていることです。ライブラリの静的メソッドを 1 つ置き換える必要がありました。

于 2013-10-18T11:56:09.643 に答える