单元测试XML独立于物理XML文件

时间:2010-06-10 20:51:46

标签: xml junit stax

我的问题是:

在JUnit中,如何为我的被测系统(SUT)设置xml数据,而不从物理存储在文件系统中的XML文件中读取SUT

背景

我获得了一个XML文件,其中包含创建发票的规则。我的工作是将这些规则从XML转换为Java对象,例如 如果我的XML文件中有如下标记,表示在30天后,该交易无法开具发票

<ExpirationDay>30</ExpirationDay> 

这会转换为Java类,比如ExpirationDateInvoicingRule

我有一个InvoiceConfiguration类,它应该获取XML文件并创建* InvoicingRule对象。我正在考虑使用StAX来解析InvoiceConfiguration

中的XML文档

问题:

我想单元测试InvoiceConfiguration。但我不希望InvoiceConfiguration在文件系统上物理地读取xml文件。我希望我的单元测试独立于任何物理存储的xml文件。我想在内存中创建一个xml表示。但是StAX解析器只接受FileReader(或者我可以使用File Object)

3 个答案:

答案 0 :(得分:0)

重构您的代码以获取Reader而不是打开文件。文件打开可以单独完成(如果你想坚持不在单元测试中访问文件的规则,那么很大程度上是不可测试的 - 但这没关系,因为它只是一行而你真的不能错!)

答案 1 :(得分:0)

以下是使用XMLUnit和自定义框架处理XML的大量测试的示例。该框架使用StAX将XML映射到Java POJO。

https://simple.svn.sourceforge.net/svnroot/simple/trunk/download/stream/src/test/java/org/simpleframework/xml/core/

没有外部依赖关系,测试覆盖率约为90%

http://simple.sourceforge.net/download/stream/report/cobertura/

答案 2 :(得分:0)

谢谢你们的帮助。 另一个很好的来源是这个链接:http://marc.info/?l=xerces-j-dev&m=86952145010437&w=2

这是Baq Haidri的答案

  

-----原始信息-----   来自:Baq Haidri [mailto:bhaidri @ ....]

     

我在Wrox出版的一本名为“专业XML”的书中找到了这个:

>
>public void parseString(String s) throws SAXException, IOException
>{
>         StringReader reader = new SringReader(s);
>         InputSource source = new InputSource(reader);
>         parser.parse(source);
>}