【问题标题】:Testing GWT serialization测试 GWT 序列化
【发布时间】:2013-12-03 17:34:37
【问题描述】:

我想编写一个 JUnit 测试来验证特定对象是否可以被 GWT RPC 过程成功序列化。我该怎么做?我正在使用 GWT 2.4 和 JUnit 4.8.1。

谢谢,- 戴夫

【问题讨论】:

  • 您升级到 GWT 2.6 还是 2.7?似乎接受的答案不再起作用。您找到在最新 GWT 中测试的方法了吗?

标签: gwt serialization junit


【解决方案1】:

接受的答案不检查无参数构造函数;以下是:

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

【讨论】:

  • 这也无法检查对象的字段是否具有无参数构造函数。
  • 从 GWT 2.6 或 2.7 开始,HostedModeClientOracleHasValuesHasValuesCommandSinkCommandServerSerializationStreamWriter 已被删除。
【解决方案2】:

找到了答案。这是

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

【讨论】:

  • 这个测试通过这个类: public class MyClass implements IsSerializable { private File file; public MyClass(String fileName) { this.file = new File(fileName); } } 虽然developers.google.com/web-toolkit/doc/1.6/… 需要一个无参数的构造函数。这里有什么问题?
  • 从 GWT 2.6 或 2.7 开始,HostedModeClientOracleHasValuesHasValuesCommandSinkCommandServerSerializationStreamWriter 已被删除。
猜你喜欢
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多