【问题标题】:Unit testing of sax parsersax解析器的单元测试
【发布时间】:2013-02-05 03:24:29
【问题描述】:

我有一个遗留的 java 代码和一些 sax 解析。我想为那些 sax 解析器编写单元测试。

sax 解析器的实现很简单。它就像一个扩展 DefaultHandler 并覆盖 startElementendElement 等方法的类。

Sax 解析器提供了一个很大的对象树,因为它们解析的 xml 非常庞大。

当我尝试为 sax 解析器编写单元测试时,我得到了一些大型测试方法:

  • 从资源中加载 XML 文件的测试变体
  • 请求 sax 解析器实例解析该 XML
  • 得到解析结果
  • 通过断言树中每个对象的每个字段,将解析的对象树与预期的对象树进行比较

正如我已经说过的,XML 是巨大的。所以当我比较结果对象时会得到很多断言。

请给我一些建议。我不想为我的遗留代码拥有的每个 sax 解析器编写如此大的测试方法。

【问题讨论】:

  • 你为什么不试试xmlunit?

标签: java xml unit-testing sax


【解决方案1】:

也试试这个。

public void testMySaxParser() 抛出异常 {
输入流 xml = getTestDocument();
// 创建一个记录事件并验证它们的自定义处理程序
// 针对预期的事件序列
MyRecordingHandler 处理程序 = new MyRecordingHandler();
// 告诉处理程序你将要生成
的序列 // 您希望稍后由真正的 SAXParser 重复的事件
handler.startRecording();
handler.startDocument();
handler.startElement("", "", "root", new Attributes());
handler.startElement("", "", "child", new Attributes());
handler.characters("一些文字".toCharArray(), 0, 9);
handler.endElement("", "", "child");
handler.startElement("", "", "child", new Attributes());
handler.characters("还有一些文字".toCharArray(), 0, 14);
handler.endElement("", "", "child");
handler.endElement();
handler.endDocument();
// 告诉处理程序“预期记录”已完成
// 并且它应该进入“播放”模式
handler.stopRecording();
// 使用解析器为处理程序生成实际事件
getSAXParser().parse(xml, handler);
// 要求处理程序对象验证预期的事件是否发生
handler.verify(); }

【讨论】:

  • 如果我将所有案例都这样写会很痛苦。
  • 另外,我相信你不能创建一个新的属性实例,因为它是一个抽象类?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多