sax解析器的单元测试

时间:2013-02-20 07:35:31

标签: java xml unit-testing sax

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

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

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

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

  • 从资源
  • 加载XML文件的测试变体
  • 询问sax解析器的实例来解析该XML
  • 获得解析结果
  • 通过断言树中每个对象的每个字段来比较已解析的对象树与预期的对象树

正如我已经说过,XML非常庞大。因此,当我比较结果对象时,得到很多断言。

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

1 个答案:

答案 0 :(得分:0)

也试一试。

  

public void 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(“Some text”.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(); }