我的问题是:
在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)
答案 0 :(得分:0)
重构您的代码以获取Reader而不是打开文件。文件打开可以单独完成(如果你想坚持不在单元测试中访问文件的规则,那么很大程度上是不可测试的 - 但这没关系,因为它只是一行而你真的不能错!)
答案 1 :(得分:0)
以下是使用XMLUnit和自定义框架处理XML的大量测试的示例。该框架使用StAX将XML映射到Java POJO。
没有外部依赖关系,测试覆盖率约为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);
>}