Модульное тестирование XML независимо от физического XML-файла

Мой вопрос:

В JUnit, как мне настроить данные xml для моей тестируемой системы (SUT), не заставляя SUT читать из XML-файла, физически хранящегося в файловой системе.

Фон:

Мне дают файл XML, который содержит правила для создания счета. Моя работа состоит в том, чтобы преобразовать эти правила из XML в объекты Java, например. Если в моем XML-файле есть тег, как показано ниже, который указывает, что по истечении 30 дней транзакция не может быть выставлена ​​в счет

<ExpirationDay>30</ExpirationDay> 

это преобразуется в класс Java, скажем, ExpirationDateInvoicingRule

У меня есть класс InvoiceConfiguration, который должен взять файл XML и создать объекты *InvoicingRule. Я думаю об использовании StAX для анализа XML-документа в InvoiceConfiguration.

Проблема:

Я хочу провести модульный тест InvoiceConfiguration. Но я не хочу, чтобы InvoiceConfiguration физически читала xml-файл в файловой системе. Я хочу, чтобы мой модульный тест не зависел от любого физического сохраненного XML-файла. Я хочу создать xml-представление в памяти. Но синтаксический анализатор StAX принимает только FileReader (или я могу играть с файловым объектом)


person RAbraham    schedule 10.06.2010    source источник


Ответы (3)


Рефакторинг вашего кода, чтобы использовать Reader вместо открытия файла. Открытие файла можно сделать отдельно (и в значительной степени не поддается проверке, если вы хотите придерживаться правила отказа от доступа к файлам в модульных тестах - но это нормально, потому что это всего лишь одна строка, и вы не можете ошибиться!)

person dty    schedule 10.06.2010

Вот пример нескольких тестов, использующих как 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/< /а>

person ng.    schedule 10.06.2010

Спасибо, ребята, за вашу помощь. Еще одним хорошим источником является эта ссылка: http://marc.info/?l=xerces-j-dev&m=86952145010437&w=2

Это ответ от Бак Хайдри

-----Исходное сообщение----- От: Бак Хайдри [mailto:bhaidri@....]

Я нашел это в книге под названием «Профессиональный XML» издательства Wrox:

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

person RAbraham    schedule 26.06.2010