#.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 выберет, использовать ли Точный или быстрый, в зависимости от размера файла, количества обнаруженных различий и других факторов. Вот хорошее чтение для более технически настроенных:
Ответ №4:
Я использовал XMLDiff от MS в прошлом, но предпочел использовать Beyond Compare 3, поскольку у него лучший графический интерфейс и функция пакетной обработки (хотя у меня нет .NET API).
для вашего тестирования используйте XNode.DeepEquals или InnerXml для сравнения представления на основе строк