Как выполнить модульное тестирование модификации файла XML, который рекурсивно указывает на другие файлы XML? - PullRequest
1 голос
/ 16 декабря 2010

Я пытаюсь выполнить модульное тестирование модификации структуры XML, например:

<element1>
    <open file="otherfile.xml">
</element1>

Предположим, что otherfile.xml содержит:

<element2>
    <open file="anotherfile.xml">
    <happytag/>
</element2>

И это anotherfile.xml выглядит так:

<element3>
    <sadtag/>
</element3>

Правильная модификация копирует и вставляет код из файла, который нужно открыть, в код, который вызвал тег open. Поэтому я ожидаю такую ​​структуру:

<element1>
    <element2>
        <element3>
            <sadtag/>
        </element3>
        <happytag/>
    </element2>
</element1>

Проблема, с которой я столкнулся, заключается в том, что я не уверен, что делать с модульным тестированием создания этой структуры. В идеале, и то, что я пытался до сих пор (безуспешно), - это создать этот модульный тест, чтобы мне не нужно было делать какие-либо вызовы в файловой системе для создания структуры. Для этого я создаю фиктивный объект, который выглядит как входной поток, который открывает файл, но на самом деле просто возвращает поток, созданный из текста

<element1>
    <open file="otherfile.xml">
</element1> 

Проблема, с которой я сталкиваюсь в этом подходе, состоит в том, что я не могу найти способ ввести текст otherfile.xml, чтобы фиктивный объект возвращал текст:

<element2>
    <open file="anotherfile.xml">
    <happytag/>
</element2>

Еще одна вещь, которую я пробовал, это поместить текст anotherfile.xml в open file="", например open file="&lt;element3&gt;...&lt;/element3&gt;">. Это не работает, потому что анализатор XML жалуется, что это недопустимый XML.

Я мог бы также создать эти xml-файлы из строк перед запуском теста, а затем удалить их после теста.

1 Ответ

1 голос
/ 16 декабря 2010

Создайте интерфейс доступа к файлам, а затем предоставьте две реализации.Одна реализация фактически открывает элементы в файловой системе.Другая реализация обращается к данным, хранящимся на карте внутри объекта.

Таким образом, ваш тестовый объект будет построен следующим образом:

file_data = {
    "otherfile.xml": "<element2>\n    <open file=\"anotherfile.xml\">\n    <happytag/>\n</element2>",
    "anotherfile.xml": "<element3>\n    <sadtag/>\n</element3>"
}
accessor = TestFileAccessor(file_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...