2013-02-20 51 views
1

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

sax解析器的实现很简单。这就像一个类延伸DefaultHandler并覆盖一些方法,如startElementendElement

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

当我尝试写SAX解析器单元测试中,我得到大的测试方法,其做的事:从资源

  • 要求SAX解析器的一个实例来解析XML XML文件的

    • 荷载试验变种
    • 解析
    • 通过断言在树中每个对象的每个字段与预期的相比解析的对象树的
    • 得到结果

    正如我所说的XML是巨大的。因此,当我比较结果对象时,得到很多断言。

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

  • +0

    你为什么不试试xmlunit? – constantlearner 2013-02-20 08:32:36

    回答

    0

    试试这个吧。

    公共无效testMySaxParser()抛出异常{
    InputStream的XML = getTestDocument();
    //创建记录事件并对其进行验证
    //对事件的预期序列
    MyRecordingHandler处理器=新MyRecordingHandler自定义处理程序();
    //告诉处理程序您即将生成的序列
    //您希望稍后由真实SAXParser重复的事件handler.startRecording();
    handler.startDocument();
    handler.startElement(“”,“”,“root”,new Attributes());处理.startElement(“”,“”,“child”,new Attributes());
    handler.characters(“Some text”.toCharArray(),0,9);
    handler.endElement(“”,“”,“child”);处理.startElement(“”,“”,“child”,new Attributes());
    handler.characters(“Some more text”.toCharArray(),0,14);
    handler.endElement(“”,“”,“child”);
    handler.endElement();
    handler.endDocument();
    //告诉处理程序“期望记录”已完成
    //并且它应该进入“回放”模式
    handler.stopRecording();
    //练习解析器生成处理程序的实际事件
    getSAXParser()。解析(xml,handler);
    //请求处理程序对象验证是否发生了预期事件
    handler.verify(); }

    +0

    如果我以这种方式写出所有情况,那将是痛苦的。 – michael 2013-02-20 20:27:34

    +0

    另外,我相信你不能创建一个新的属性实例,因为它是一个抽象类? – paranza 2016-08-08 11:02:15