Поблочное тестирование [закрытое] Поколение XML

Часть меня удивляется, если вы могли бы предоставить свою собственную функцию санитарии так же просто, как это:

$value = preg_replace('/[^a-zA-Z_]*/', '', $value);

Я действительно не продумал это, но кажется, что удаление чего-либо, кроме символов и подчеркиваний может работать.

34
задан Dan 2 February 2009 в 16:19
поделиться

9 ответов

Во-первых, как в значительной степени все говорят, проверьте XML, если существует схема, определенная для него. (Если нет, определите тот.)

, Но можно создать тесты, которые намного более детализированы, чем это путем выполнения запросов XPath против документа, например:

string xml="Your xml string here" ;
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
path = "/doc/element1[@id='key1']/element2[. = 'value2']";
Assert.IsTrue(doc.SelectSingleNode(path) != null);

Это позволяет Вам протестировать не только, действителен ли Ваш документ семантически, но и заполняет ли метод, производящий его, его со значениями, которые Вы ожидаете.

21
ответ дан Thunder 11 October 2019 в 06:59
поделиться

почему бы не предполагать, что некоторый коммерческий xml синтаксический анализатор корректен и проверяет Ваш код XML против него? что-то как.

Assert.IsTrue(myDoc.Xml.ParseOK)

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

0
ответ дан Rui Jarimba 11 October 2019 в 06:59
поделиться

Другая причина использовать Схему для проверки против состоит в том, что, в то время как узлы XML явно заказаны, атрибуты XML не.

Так Ваше сравнение строк:

Assert.AreEqual(myDoc.OuterXML(),"big string of XML")

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

0
ответ дан merlinc 11 October 2019 в 06:59
поделиться

Проверьте против XML-схемы или DTD, также ключ от английского замка, что узлы имеют значения, которые Вы ожидаете.

4
ответ дан svinto 11 October 2019 в 06:59
поделиться

Если у Вас есть стандартный формат, который Вы ожидаете, что вывод будет, почему бы не создаст XML-схему или DTD и проверит против этого. Это не будет зависеть от данных, быть гибким - также. Также определение, как XML может быть сформирован, может быть полезным при разработке Вас система.

3
ответ дан Jeremy French 11 October 2019 в 06:59
поделиться

Проверьте его против использования схемы XSD класс XmlSchema. Его найденный в соответствии с System.XML я думаю. Другая опция состояла бы в том, чтобы записать класс сериализации (XMLSerializer) для десериализации XML в объект. Усиление будет то, что это неявно проверит Вашу структуру, и после этого к значениям можно легко получить доступ для тестирования использования полученного объекта.

0
ответ дан Adrian Zanescu 11 October 2019 в 06:59
поделиться

XMLUnit может помочь Вам.

12
ответ дан Ionuț G. Stan 11 October 2019 в 06:59
поделиться

Другая возможность могла бы состоять в том, чтобы использовать XmlReader и проверить на ошибочное количество> 0. Что-то вроде этого:

    void CheckXml()
    {
        string _xmlFile = "this.xml";
        string _xsdFile = "schema.xsd"; 
        StringCollection _xmlErrors = new StringCollection();

        XmlReader reader = null;
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandler);
        settings.ValidationType = ValidationType.Schema;
        settings.IgnoreComments = chkIgnoreComments.Checked;
        settings.IgnoreProcessingInstructions = chkIgnoreProcessingInstructions.Checked;
        settings.IgnoreWhitespace = chkIgnoreWhiteSpace.Checked;
        settings.Schemas.Add(null, XmlReader.Create(_xsdFile));
        reader = XmlReader.Create(_xmlFile, settings);
        while (reader.Read())
        {
        }
        reader.Close();
        Assert.AreEqual(_xmlErrors.Count,0);
    }    

    void ValidationEventHandler(object sender, ValidationEventArgs args)
    {
        _xmlErrors.Add("<" + args.Severity + "> " + args.Message);
    }
5
ответ дан Mike K. 11 October 2019 в 06:59
поделиться

Убедитесь, что результирующий документ правильно сформирован Убедиться, что результирующий документ действителен Убедиться в правильности результирующего документа.

Предположительно, вы создаете XML-документ из полезных данных, поэтому вы захотите убедиться, что у вас есть правильный охват входных данных для ваших тестов. Наиболее распространенными проблемами, которые я вижу, являются

  • Неправильно приведенные элементы
  • Неправильно приведенные атрибуты
  • Неправильно приведенные имена элементов
  • Неправильно приведенные имена атрибутов

Поэтому, если вы еще не сделали этого, вам нужно просмотреть спецификацию XML, чтобы узнать, что разрешено в каждом месте.

Сколько "проверок" должно происходить в каждом тесте, не сразу понятно. Я полагаю, что это во многом зависит от того, что такое единица в вашем проблемном пространстве. Кажется разумным, что каждый юнит-тест проверяет, что одна часть данных правильно выражена в XML. В этом случае я согласен с Робертом, что простая проверка того, что вы нашли нужные данные в одном месте XPath, является наилучшей.

Для более крупных автоматизированных тестов, когда вы хотите проверить весь документ, то, что я нашел эффективным, это иметь Ожидаемые результаты, которые также являются документом, и проходить по нему узел за узлом, используя выражения XPath для поиска соответствующего узла в реальном документе, а затем применяя правильное сравнение данных, закодированных в этих двух узлах.

При таком подходе обычно требуется отлавливать все сбои сразу, а не прерываться при первом сбое, поэтому может потребоваться хитрость в отслеживании мест, где произошли несоответствия.

Немного доработав, вы сможете распознавать определенные типы элементов как исключенные из теста (например, отметка времени), или проверять, что они являются указателями на эквивалентные узлы, или... любые другие виды пользовательской проверки.

0
ответ дан 27 November 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: