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 匹配器的集合,用于在 XML 和 XHTML 文档中进行 XPath 断言。

举个例子,假设一个正在进行测试的类生成了一个需要包含单个 <message> 元素且内容为 "hello, world!" 的 XML。

下面是在单元测试中编写这段代码的样例:

我知道有两种替代方案,几乎可以完成相同的工作:David Ehringer的xml-matchers和Hamcrest自身的hasXPath()方法。

我都尝试过,但是遇到了一些问题。

首先,Hamcrest的hasXPath()只能使用Node的实例。使用这个方法时,将String转换为Node变成了每个单元测试中重复且常规的任务。

与之相比,这是Hamcrest的一个非常奇怪的限制,因为jcabi-matchers几乎可以与任何东西一起使用,从StringReader甚至InputStream

其次,xml-matchersXmlMatchers对于处理命名空间提供了一种非常不方便的方式。在使用非默认命名空间的XPath查询之前,您需要创建一个NamespaceContext的实例。

该库提供了一个简单的实现这个接口,但是仍然需要在每个单元测试中添加额外的代码。

jcabi-matchers进一步简化了命名空间处理问题,因为它预定义了大多数常用的命名空间,包括xhtmlxsxsl等。

以下示例可以直接使用,无需任何额外配置:

总之,我使用这个库的主要目标是它的使用简单性。

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

sixnines availability badge   GitHub stars