Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XML UnitTest. Как ? / 10 сообщений из 10, страница 1 из 1
10.02.2014, 20:44
    #38556300
NTierNoob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
Подскажите как юнит-тестить классы, результатом работы которых является XML.

Класс формирует XML. Нужно убедится, что на выходе результат тот, что ожидается. Для этого нужно сравнить XML с правильным вариантом (стандартный алгоритм ААА: Arrange, Act, Assert).

Очевидно, что тупое сравнение текст на совпадение 1в1 фактически бесполезен. Любой лишний пробел в тексте файла между тэгами, и все ломается.
Даже если в XmlDocument загрузить строку и потом сохранить результат в файл, скорее всего что-то да изменится если потом считать строку.

Есть и более явные сложности - namespace. Его можно явно прописать родительскому тэгу и тогда наследники автоматически будут входить в это пространство. А можно явно каждому тэгу-наследнику прописать это namespace. Да будет бессмысленность, но XML в результате будет один и тот же.

Наверное есть и куча других деталей.

Как Unit Test'ить классы, возвращающие XML ? Существует ли какая то библиотека, которая сверяет XML'ы интеллектуально ?

Есть тут любители unit test'ов, как справляетесь с этим ? Что говорит Фаулер на этот счет ? Наверное должно быть что-то. Уж слишком во многих системах используется XML.
...
Рейтинг: 0 / 0
10.02.2014, 21:51
    #38556340
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
NTierNoob,

DeepEquals ?
...
Рейтинг: 0 / 0
11.02.2014, 06:28
    #38556559
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
petalvik DeepEquals ?
DeepEquals вернет False, если у какого-либо элемента будет другим порядок следования namespaces в их объявлении (при этом набор namespaces остаётся идентичным). Аналогичная ситуация с порядком следования атрибутов какого-л. элемента. Я бы просто подписал оба xml одним и тем же ключом, а потом сравнил сигнатуры. Правда, и этот метод не без недостатков - например, он вернет разные сигнатуры для одного и того набора namespaces, но по-разному префиксированных в документах - т.е. типа
Код: xml
1.
<root xmlns="urn:foo" xmlns:bar="urn:bar" xmlns:zot="urn:zot">


и
Код: xml
1.
<root xmlns:n1="urn:foo" xmlns:n2="urn:bar" xmlns:n3="urn:zot">


А вообще, xml - это не что-то само по себе, а способ сериализации данных, и самый верный способ сравнивать xml - десериализовать данные в соответствующие структуры (класс), и сравнивать их, а не сам xml.
...
Рейтинг: 0 / 0
11.02.2014, 06:38
    #38556565
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
NTierNoob,

А еще есть такая полезная штука, как гугл: https://www.google.ru/search?q=c# compare xml - первая же ссылка в выдаче, по которой попадаем вот сюда: http://msdn.microsoft.com/en-us/library/aa302294.aspx
...
Рейтинг: 0 / 0
11.02.2014, 10:43
    #38556740
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
xsd
...
Рейтинг: 0 / 0
11.02.2014, 11:09
    #38556770
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
Antonariyxsd XSD - это схема документа. Как вы с XSD будете проверять данные в нодах?
...
Рейтинг: 0 / 0
11.02.2014, 11:14
    #38556778
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
Во-первых, на данные тоже можно накладывать ограничения, во-вторых, пусть автор решает. Он не указал, каких критериев достаточно для удачного сравнения с образцом.
...
Рейтинг: 0 / 0
11.02.2014, 13:29
    #38557016
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
AntonariyВо-первых, на данные тоже можно накладывать ограничения, во-вторых, пусть автор решает. Он не указал, каких критериев достаточно для удачного сравнения с образцом.
Может возможно прочитать хмл каким нибудь LINQ to XML или чем нибудь подобным, и имея обьект, проверять его поля?
...
Рейтинг: 0 / 0
11.02.2014, 14:28
    #38557145
NTierNoob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
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 окажутся одинаковыми у диффера :) Надо смотреть.
Спасибо.
...
Рейтинг: 0 / 0
11.02.2014, 21:40
    #38557799
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML UnitTest. Как ?
NTierNoobUnit Test должен проверять конкретно, что 3==3.
А xsd проверит лишь, что в <tag> хранится целочисленное значение - что толку для конкретного теста.Да не вопрос:

Код: xml
1.
2.
3.
4.
5.
6.
7.
  <xs:element name="test">
    <xs:simpleType>
      <xs:restriction base="xs:positiveInteger">
        <xs:enumeration value="3"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XML UnitTest. Как ? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]