1

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

sax 解析器的实现很简单。它就像一个类,它扩展DefaultHandler和覆盖了一些方法,如startElementendElement

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

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

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

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

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

4

1 回答 1

0

也试试这个。

公共无效 testMySaxParser() 抛出异常 {
InputStream xml = getTestDocument();
// 创建一个自定义处理程序来记录事件并验证它们
// 针对预期的事件序列
MyRecordingHandler handler = new MyRecordingHandler();
// 告诉处理程序您将要生成一系列
事件 // 您希望稍后由真正的 SAXParser 重复
handler.startRecording();
handler.startDocument();
handler.startElement("", "", "root", new Attributes());
handler.startElement("", "", "child", new Attributes());
handler.characters("一些文字".
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(); }

于 2013-02-20T08:33:39.570 回答