Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
独立于物理XML文件的单元测试XML_Xml_Junit_Stax - Fatal编程技术网

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

独立于物理XML文件的单元测试XML,xml,junit,stax,Xml,Junit,Stax,我的问题是: 在JUnit中,如何在TestSUT下为系统设置xml数据,而不使SUT从物理存储在文件系统上的xml文件中读取 背景: 我得到一个XML文件,其中包含创建发票的规则。我的工作是将这些规则从XML转换为Java对象,例如。 如果在我的XML文件中有一个如下的标记,表明在30天之后,事务将无法开票 <ExpirationDay>30</ExpirationDay> 这将转换为Java类,比如ExpirationDateInvoicingRule 我有一个类

我的问题是:

在JUnit中,如何在TestSUT下为系统设置xml数据,而不使SUT从物理存储在文件系统上的xml文件中读取

背景:

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

<ExpirationDay>30</ExpirationDay> 
这将转换为Java类,比如ExpirationDateInvoicingRule

我有一个类InvoiceConfiguration,它应该接受XML文件并创建*InvoicingRule对象。我正在考虑使用StAX解析InvoiceConfiguration中的XML文档

问题:


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

重构代码以接受Reader而不是打开文件。如果您想坚持在单元测试中不访问文件的规则,那么文件打开可以单独完成,并且在很大程度上是不稳定的——但这没关系,因为这只是一行,您不会真的弄错

重构您的代码,以获取读取器,而不是打开文件。如果您想坚持在单元测试中不访问文件的规则,那么文件打开可以单独完成,并且在很大程度上是不稳定的——但这没关系,因为这只是一行,您不会真的弄错

下面是一些测试的示例,这些测试同时使用XMLUnit和自定义框架来处理XML。该框架使用StAX将XML映射到javapojo

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


下面是一个使用XMLUnit和自定义框架处理XML的许多测试的示例。该框架使用StAX将XML映射到javapojo

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

谢谢你们的帮助。 另一个好的来源是这个链接:

这是Baq Haidri的答案

---原始消息--- 发件人:Baq Haidri[邮寄地址:bhaidri@....]

我在Wrox publishing的一本名为“Professional XML”的书中发现了这一点:

谢谢你们的帮助。 另一个好的来源是这个链接:

这是Baq Haidri的答案

---原始消息--- 发件人:Baq Haidri[邮寄地址:bhaidri@....]

我在Wrox publishing的一本名为“Professional XML”的书中发现了这一点:

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