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

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

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

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

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

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

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

DeepEquals ?
...
Рейтинг: 0 / 0
XML UnitTest. Как ?
    #38556559
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
XML UnitTest. Как ?
    #38556565
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NTierNoob,

А еще есть такая полезная штука, как гугл: https://www.google.ru/search?q=c# compare xml - первая же ссылка в выдаче, по которой попадаем вот сюда: http://msdn.microsoft.com/en-us/library/aa302294.aspx
...
Рейтинг: 0 / 0
XML UnitTest. Как ?
    #38556740
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xsd
...
Рейтинг: 0 / 0
XML UnitTest. Как ?
    #38556770
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyxsd XSD - это схема документа. Как вы с XSD будете проверять данные в нодах?
...
Рейтинг: 0 / 0
XML UnitTest. Как ?
    #38556778
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, на данные тоже можно накладывать ограничения, во-вторых, пусть автор решает. Он не указал, каких критериев достаточно для удачного сравнения с образцом.
...
Рейтинг: 0 / 0
XML UnitTest. Как ?
    #38557016
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВо-первых, на данные тоже можно накладывать ограничения, во-вторых, пусть автор решает. Он не указал, каких критериев достаточно для удачного сравнения с образцом.
Может возможно прочитать хмл каким нибудь LINQ to XML или чем нибудь подобным, и имея обьект, проверять его поля?
...
Рейтинг: 0 / 0
XML UnitTest. Как ?
    #38557145
NTierNoob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
XML UnitTest. Как ?
    #38557799
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XML UnitTest. Как ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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