2

我的问题是:

在 JUnit 中,如何在不从物理存储在文件系统上的 XML 文件中读取 SUT 的情况下为我的被测系统(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(或者我可以使用文件对象)

4

3 回答 3

0

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

于 2010-06-10T20:54:04.230 回答
0

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

这是来自 Baq Haidri 的回答

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

我在 Wrox 出版公司的一本名为“Professional XML”的书中找到了这一点:

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

于 2010-06-26T22:51:34.063 回答
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/

于 2010-06-10T21:18:36.440 回答