Сравнение .net Xml для UnitTesting - PullRequest
8 голосов
/ 05 мая 2011

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

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

Пока я могу просто сравнить 2 строки XML и получить результат true / false, чтобы сказать мне, совпадают ли они, насколько эти данные касаются меня.счастлив ...

Ответы [ 4 ]

7 голосов
/ 05 мая 2011

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

3 голосов
/ 05 мая 2011

Попробуйте 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 голос
/ 08 ноября 2011

Что нужно помнить о MSXML XMLDiff, так это то, что если вы сравниваете очень большие XML-документы, убедитесь, что для XMLDiff.Algorithm установлено , а не установлено значение "Precise", иначе у вас может не хватить памяти. По умолчанию он установлен на Авто, что является безопасным выбором, поскольку API будет выбирать, использовать ли Precise или Fast в зависимости от размера файла, количества обнаруженных различий и других факторов. Вот хорошее чтение для более технически склонных:

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

0 голосов
/ 05 мая 2011

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

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

...