2011-11-15 16 views
4

GWT RPCプロシージャで特定のオブジェクトを正常にシリアル化できるかどうかを検証するJUnitテストを作成します。どうすればいい?私はGWT 2.4とJUnit 4.8.1を使用しています。GWTシリアル化のテスト

ありがとう、 - Dave

+0

GWT 2.6または2.7にアップグレードしましたか?受け入れられた答えがもう働かないようです。あなたは最新のGWTでテストする方法を見つけましたか? – sixtyfootersdude

答えて

1

答えを見つけました。それは

@Test 
public void testObjSerializability() { 
    final Object obj = getObject(); 
    final HostedModeClientOracle hmco =new HostedModeClientOracle(); 
    final HasValues command = new ReturnCommand(); 
    final HasValuesCommandSink hvcs = new HasValuesCommandSink(command); 
    final CommandServerSerializationStreamWriter out = new CommandServerSerializationStreamWriter(hmco, hvcs); 
    try { 
     out.writeObject(obj); 
    } catch (Exception e) { 
     e.printStackTrace(System.err); 
     fail("Object couldn't be serialized:" + e.getMessage());    
    } 
} 
+1

このテストはこのクラスに渡されます: パブリッククラスMyClassはIsSerializable { プライベートファイルファイルを実装します。 公開MyClass(文字列ファイル名){ this.file = new File(fileName); } } https://developers.google.com/web-toolkit/doc/1.6/DevGuideServerCommunication#DevGuideSerializableTypesには、引数なしのコンストラクタが必要です。何がここに間違っている? – Alex

+0

GWT 2.6または2.7の 'HostedModeClientOracle'、' HasValues'、 'HasValuesCommandSink'および' CommandServerSerializationStreamWriter'は削除されました。 – sixtyfootersdude

4

です。受け入れられた答えでは、引数なしのコンストラクタはチェックされません。次のようになります。

public static void checkGwtSerializability(Object o) throws RuntimeException { 
    HostedModeClientOracle hmco = new HostedModeClientOracle(); 
    HasValues command = new ReturnCommand(); 
    HasValuesCommandSink hvcs = new HasValuesCommandSink(command); 
    CommandServerSerializationStreamWriter out = new CommandServerSerializationStreamWriter(hmco, hvcs); 

    try { 
     out.writeObject(o); 
    } catch (SerializationException e) { 
     throw new RuntimeException("Object not serializable: " + o + " Caused by: " + e.getMessage(), e); 
    } 

    try { 
     o.getClass().getDeclaredConstructor(); 
    } catch (NoSuchMethodException e) { 
     throw new RuntimeException("Object not serializable: " + o + " Caused by: " + e.getMessage(), e); 
    } 
} 
+0

これは、オブジェクトのフィールドに引数なしのコンストラクタがあるかどうかをチェックすることもできません。 –

+0

GWT 2.6または2.7では、 'HostedModeClientOracle'、' HasValues'、 'HasValuesCommandSink'および' CommandServerSerializationStreamWriter'が削除されました。 – sixtyfootersdude

関連する問題