XML/XPath Matchers for Hamcrest

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Hamcrest - мой любимый инструмент в модульном тестировании. Он заменяет процедурные утверждения org.junit.Assert в JUnit на объектно-ориентированный механизм. Однако, я подробнее расскажу об этом позже.

Теперь, однако, я хочу продемонстрировать новую библиотеку, опубликованную сегодня на GitHub и Maven Central: jcabi-matchers. jcabi-matchers - это набор матчеров Hamcrest для выполнения XPath-утверждений в XML и XHTML-документах.

Допустим, например, что класс, проходящий тестирование, создает XML, в котором должен содержаться единственный элемент <message> с содержимым “hello, world!”

Вот как выглядел бы этот код в модульном тесте:

Есть два альтернативных варианта, о которых я знаю, и они делают почти то же самое: xml-matchers от Дэвида Эрингера и метод hasXPath() в самом Hamcrest.

Я пробовал оба варианта, но столкнулся с несколькими проблемами.

Во-первых, Hamcrest hasXPath() работает только с экземпляром Node. С использованием этого метода преобразование String в Node становится рутинной задачей в каждом модульном тесте.

Вышеупомянутое является очень странной ограниченностью Hamcrest в сравнении с jcabi-matchers, которая работает с практически чем угодно, от String до Reader и даже InputStream.

Во-вторых, XmlMatchers из xml-matchers предоставляет очень неудобный способ работы с пространствами имен. Прежде чем использовать запрос XPath с нестандартным пространством имен, необходимо создать экземпляр NamespaceContext.

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

jcabi-matchers упрощает работу с пространствами имен еще больше, так как в ней предопределены наиболее популярные пространства имен, включая xhtml, xs, xsl и т.д.

Следующий пример работает сразу после установки—без дополнительной настройки:

В общем, моя основная цель при создании библиотеки была ее простота использования.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-17 at 15:59

sixnines availability badge   GitHub stars