|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
Подскажите как юнит-тестить классы, результатом работы которых является XML. Класс формирует XML. Нужно убедится, что на выходе результат тот, что ожидается. Для этого нужно сравнить XML с правильным вариантом (стандартный алгоритм ААА: Arrange, Act, Assert). Очевидно, что тупое сравнение текст на совпадение 1в1 фактически бесполезен. Любой лишний пробел в тексте файла между тэгами, и все ломается. Даже если в XmlDocument загрузить строку и потом сохранить результат в файл, скорее всего что-то да изменится если потом считать строку. Есть и более явные сложности - namespace. Его можно явно прописать родительскому тэгу и тогда наследники автоматически будут входить в это пространство. А можно явно каждому тэгу-наследнику прописать это namespace. Да будет бессмысленность, но XML в результате будет один и тот же. Наверное есть и куча других деталей. Как Unit Test'ить классы, возвращающие XML ? Существует ли какая то библиотека, которая сверяет XML'ы интеллектуально ? Есть тут любители unit test'ов, как справляетесь с этим ? Что говорит Фаулер на этот счет ? Наверное должно быть что-то. Уж слишком во многих системах используется XML. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2014, 20:44 |
|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
petalvik DeepEquals ? DeepEquals вернет False, если у какого-либо элемента будет другим порядок следования namespaces в их объявлении (при этом набор namespaces остаётся идентичным). Аналогичная ситуация с порядком следования атрибутов какого-л. элемента. Я бы просто подписал оба xml одним и тем же ключом, а потом сравнил сигнатуры. Правда, и этот метод не без недостатков - например, он вернет разные сигнатуры для одного и того набора namespaces, но по-разному префиксированных в документах - т.е. типа Код: xml 1.
и Код: xml 1.
А вообще, xml - это не что-то само по себе, а способ сериализации данных, и самый верный способ сравнивать xml - десериализовать данные в соответствующие структуры (класс), и сравнивать их, а не сам xml. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 06:28 |
|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
NTierNoob, А еще есть такая полезная штука, как гугл: https://www.google.ru/search?q=c# compare xml - первая же ссылка в выдаче, по которой попадаем вот сюда: http://msdn.microsoft.com/en-us/library/aa302294.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 06:38 |
|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
Antonariyxsd XSD - это схема документа. Как вы с XSD будете проверять данные в нодах? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 11:09 |
|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
Во-первых, на данные тоже можно накладывать ограничения, во-вторых, пусть автор решает. Он не указал, каких критериев достаточно для удачного сравнения с образцом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 11:14 |
|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
AntonariyВо-первых, на данные тоже можно накладывать ограничения, во-вторых, пусть автор решает. Он не указал, каких критериев достаточно для удачного сравнения с образцом. Может возможно прочитать хмл каким нибудь LINQ to XML или чем нибудь подобным, и имея обьект, проверять его поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 13:29 |
|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
Antonariyxsd Unit Test должен проверять конкретно, что 3==3. А xsd проверит лишь, что в <tag> хранится целочисленное значение - что толку для конкретного теста. D129Может возможно прочитать хмл каким нибудь LINQ to XML или чем нибудь подобным, и имея обьект, проверять его поля? Мне нужно проверить, что метод сформировал правильный XML. А если я сначала из этого XML создам объект, значит тест проверит оба этих функционала за раз. Если будет ошибка на первом этапе, второй этап вообще не пройдет. Не создать объект из некорректного XML. Это будет уже интеграционное тестирование. Юнит тест должен концентрироваться на минимальных частях - на 1 методе, к примеру. Сон Веры ПавловныNTierNoob, А еще есть такая полезная штука, как гугл: https://www.google.ru/search?q=c# compare xml - первая же ссылка в выдаче, по которой попадаем вот сюда: http://msdn.microsoft.com/en-us/library/aa302294.aspx Возможно это то, что нужно. Смотрю и настройки там интересные: XmlDiffOptions.IgnoreChildOrder | XmlDiffOptions.IgnoreNamespaces | XmlDiffOptions.IgnorePrefixes Хотя есть сомнения. Как бы не вышло, что со всеми этими настройками не оказалось, что разные XML окажутся одинаковыми у диффера :) Надо смотреть. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 14:28 |
|
XML UnitTest. Как ?
|
|||
---|---|---|---|
#18+
NTierNoobUnit Test должен проверять конкретно, что 3==3. А xsd проверит лишь, что в <tag> хранится целочисленное значение - что толку для конкретного теста.Да не вопрос: Код: xml 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 21:40 |
|
|
start [/forum/topic.php?fid=20&gotonew=1&tid=1403284]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
12ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 200ms |
0 / 0 |