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几乎可以与任何东西一起使用,从String
到Reader
甚至InputStream
。
其次,xml-matchers的XmlMatchers
对于处理命名空间提供了一种非常不方便的方式。在使用非默认命名空间的XPath查询之前,您需要创建一个NamespaceContext
的实例。
该库提供了一个简单的实现这个接口,但是仍然需要在每个单元测试中添加额外的代码。
jcabi-matchers进一步简化了命名空间处理问题,因为它预定义了大多数常用的命名空间,包括xhtml
,xs
,xsl
等。
以下示例可以直接使用,无需任何额外配置:
总之,我使用这个库的主要目标是它的使用简单性。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-17 at 15:58