Модульное тестирование XML независимо от физического XML-файла - PullRequest
2 голосов
/ 11 июня 2010

Мой вопрос:

В 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 (или я могу играть с File Object)

Ответы [ 3 ]

0 голосов
/ 11 июня 2010

Вот пример довольно многих тестов, которые используют как XMLUnit, так и пользовательскую среду для обработки XML.Фреймворк использует StAX для сопоставления XML с POJO Java.

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/

0 голосов
/ 27 июня 2010

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

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

----- Исходное сообщение ----- От: Бак Хайдри [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);
>}

0 голосов
/ 11 июня 2010

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

...