什么序列化器是Android使用Bundle.putSerializable背后?

时间:2014-07-08 12:02:22

标签: android

Bundle.putSerializable后面使用Android的串行器是什么?

我想知道的原因是我想编写一个单元测试来检查我的类是否实际成功序列化。实施java.io.Serializable并不能保证这一点。

编辑:我想我可以将我的问题改为"如何在使用Robolectric"

的Java下运行Junit的单元测试中序列化实现Serializable接口的Object

1 个答案:

答案 0 :(得分:0)

我假设它使用标准Java Serialization。要进行模拟,请使用可序列化对象作为输入在ObjectOutputStream上调用writeObject - 方法。然后使用readObject()反序列化并检查结果。

示例代码:

class SomeSerializableObject implements Serializable {
    public String SomeProperty;
}

@Test
public void SomeSerializableObject_IsSerializable() throws IOException, ClassNotFoundException {
    // Setup
    SomeSerializableObject obj = new SomeSerializableObject();
    obj.SomeProperty = "Hi!";
    ByteArrayOutputStream bo = new ByteArrayOutputStream(10000);
    ObjectOutputStream os = new ObjectOutputStream(bo);

    // Act
    os.writeObject(obj);

    // Assert
    byte[] raw = bo.toByteArray();
    ObjectInputStream is = new ObjectInputStream(new ByteArrayInputStream(raw));
    SomeSerializableObject result = (SomeSerializableObject) is.readObject();
    assertEquals("Hi!", result.SomeProperty);
}