Тестирование класса NSXMLParserDelegate - PullRequest
0 голосов
/ 08 марта 2012

Я реализовал протокол NSXMLParserDelegate и, похоже, успешно анализирую XML с помощью NSXMLParser. XSD для XML, который я анализирую, довольно тесно связан с примерно 100 тегами и атрибутами, которые иногда могут быть довольно глубоко вложенными. Я заполняю объектную иерархию из данных в документах XML, и, кажется, все идет хорошо.

Мой вопрос: как мне эффективно это проверить? В моем делегате много логики «if / else if», а также флагов BOOL, чтобы отслеживать, где я нахожусь в анализируемом документе. Я мог бы легко ввести опечатку при написании делегата.

Мое первоначальное желание - создать тестовый входной документ, который использует все элементы и атрибуты, указанные в XSD. После его анализа я смог «NSLog ()» все, что было вставлено в иерархию объектов, но это кажется слишком трудоемким.

Есть ли лучший способ подумать об этой проблеме, или мне просто засучить рукава и перебрать ее?

1 Ответ

0 голосов
/ 08 марта 2012

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

Мы делаем это с большим количеством типов файлов XML, которыми мы управляем как для синтаксического анализа, так и для генерации (и ради интереса, мы подключаем вывод генератора к анализатору в другом модульном тесте).

Существует много полезной справочной информации по настройке модульных тестов от Apple, и многие проекты с открытым исходным кодом также используют модульное тестирование.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...