WEB开发网
开发学院软件开发Java 测试对象串行化:容易被遗漏的重要测试 阅读

测试对象串行化:容易被遗漏的重要测试

 2010-01-11 00:00:00 来源:WEB开发网   
核心提示: 我能否将其串行化?通常您编写的第一个串行化测试就是用于验证串行化是否可行的测试,即使一个类实现了 Serializable,测试对象串行化:容易被遗漏的重要测试(2),依然不能保证它能够串行化,例如,因为它还提供了一个反串行化的简单测试,而且编码和实现相对来说比较容易,如果一个可串行化的容器(如

我能否将其串行化?

通常您编写的第一个串行化测试就是用于验证串行化是否可行的测试。即使一个类实现了 Serializable,依然不能保证它能够串行化。例如,如果一个可串行化的容器(如 ArrayList)包含一个不可串行化的对象(如 Socket),则在您尝试串行化此容器时,将抛出 NotSerializableException。

通常,对此测试,您只需在 ByteArrayOutputStream 上写入数据。若未抛出任何异常,测试即通过。如果您愿意,还可测试一些已写入的输出。例如,清单 1 所示代码片段用于测试 Jaxen 的 BaseXPath 类是否可串行化:

清单 1. 此类是否可串行化?
public void testIsSerializable() 
  throws JaxenException, IOException { 
 
  BaseXPath path = new BaseXPath("//foo", new DocumentNavigator()); 
  ByteArrayOutputStream out = new ByteArrayOutputStream(); 
  ObjectOutputStream oos = new ObjectOutputStream(out); 
  oos.writeObject(path); 
  oos.close(); 
  assertTrue(out.toByteArray().length > 0); 
 
  }

测试串行化形式

接下来,您想要编写一个测试,不仅要验证输出得到了显示,还要验证输出是正确的。您可通过两种方式完成这一任务:

反串行化对象,并将其与原始对象相比较。

逐字节地将其与参考 .ser 文件相比较。

我通常会从第一种选择入手,因为它还提供了一个反串行化的简单测试,而且编码和实现相对来说比较容易。例如,清单 2 所示代码片段将测试 Jaxen 的 SimpleVariableContext 类是否可写入并在之后重新读回:

上一页  1 2 3 4 5 6 7  下一页

Tags:测试 对象 串行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接