测试GWT序列化

4
我想编写一个JUnit测试来验证特定对象是否可以成功地通过GWT RPC过程进行序列化。我该怎么做?我使用的是GWT 2.4和JUnit 4.8.1。
谢谢,- Dave

你是否升级到了GWT 2.6或2.7?看起来接受的答案不再有效了。你是否找到了在最新的GWT中测试的方法? - sixtyfootersdude
2个回答

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

这也未能检查对象的字段是否具有无参构造函数。 - Nicolas
从GWT 2.6或2.7开始,已删除HostedModeClientOracleHasValuesHasValuesCommandSinkCommandServerSerializationStreamWriter - 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
这个测试通过了这个类:public class MyClass implements IsSerializable { private File file; public MyClass(String fileName) { this.file = new File(fileName); } }尽管 https://developers.google.com/web-toolkit/doc/1.6/DevGuideServerCommunication#DevGuideSerializableTypes 要求一个无参构造函数。这里有什么问题? - Alex
从GWT 2.6或2.7开始,已删除HostedModeClientOracleHasValuesHasValuesCommandSinkCommandServerSerializationStreamWriter - sixtyfootersdude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接