средство сравнения .net Xml для UnitTesting

#.net #xml #unit-testing #nunit #xmlunit

#.net #xml #модульное тестирование #nunit #xmlunit

Вопрос:

У меня есть несколько модульных тестов, в которых мне нужно убедиться, что XML, сгенерированный методом, содержит те же элементы / значения, что и ожидаемый Xml-документ.

Я использовал xmlunit на Java, и хотя у них есть версия .net, похоже, что она не поддерживает пространства имен. Существуют ли какие-либо альтернативы внутри .сеть для этого?

Пока я могу просто сравнить 2 Xml-строки и получить результат true / false, который скажет мне, совпадают ли они с точки зрения содержащихся в них данных, я доволен…

Комментарии:

1. Вы хотите также сравнить пространства имен или только узлы, содержащиеся в XML

Ответ №1:

Обычно я находил этот XNode.Для моих нужд достаточно DeepEquals. Это часть BCL, поэтому загрузка не требуется.

Ответ №2:

Попробуйте Microsoft.XmlDiffPatch:

 static public bool IsXmlEqual( XmlReader x1, XmlReader x2,
    bool IgnoreChildOrder, bool IgnoreComments, bool IgnorePI, bool IgnoreWhitespace,
    bool IgnoreNamespaces, bool IgnorePrefixes, bool IgnoreXmlDecl, bool IgnoreDtd
)
{
    XmlDiffOptions options = XmlDiffOptions.None;
    if (IgnoreChildOrder) options |= XmlDiffOptions.IgnoreChildOrder;
    if (IgnoreComments) options |= XmlDiffOptions.IgnoreComments;
    if (IgnorePI) options |= XmlDiffOptions.IgnorePI;
    if (IgnoreWhitespace) options |= XmlDiffOptions.IgnoreWhitespace;
    if (IgnoreNamespaces) options |= XmlDiffOptions.IgnoreNamespaces;
    if (IgnorePrefixes) options |= XmlDiffOptions.IgnorePrefixes;
    if (IgnoreXmlDecl) options |= XmlDiffOptions.IgnoreXmlDecl;
    if (IgnoreDtd) options |= XmlDiffOptions.IgnoreDtd;

    XmlDiff xmlDiff = new XmlDiff(options);
    bool bequal = xmlDiff.Compare(x1, x2, null);
    return bequal;
}
  

Комментарии:

1. 1 для исправления различий в MS Xml. Есть ли лучшая ссылка для скачивания, чем msdn.microsoft.com/en-us/library/Aa302294 ?

2. Я думаю, что это все. Это довольно старая библиотека (но и XML тоже). Это работает как шарм.

3. Вы также можете загрузить MS XMLDiffPatch через менеджер пакетов NuGet в Visual Studio.

Ответ №3:

Нужно помнить о MSXML XMLDiff, что если вы сравниваете очень большие XML-документов, убедитесь, что ваш XMLDiff.Algorithm — это не значение «точно» или, возможно, вы будете запускать из памяти. По умолчанию для него установлено значение Auto, что является безопасным выбором, поскольку API выберет, использовать ли Точный или быстрый, в зависимости от размера файла, количества обнаруженных различий и других факторов. Вот хорошее чтение для более технически настроенных:

http://treepatch.sourceforge.net/report.pdf

Ответ №4:

Я использовал XMLDiff от MS в прошлом, но предпочел использовать Beyond Compare 3, поскольку у него лучший графический интерфейс и функция пакетной обработки (хотя у меня нет .NET API).

для вашего тестирования используйте XNode.DeepEquals или InnerXml для сравнения представления на основе строк