有没有一个使用Hamcrest“describeMismatch”功能的JUnit assertThat版本?

6

在我尝试的所有JUnit版本中(直到4.8.1),一个失败的assertThat将显示一个错误消息,看起来像:

期望值:[describeTo]
实际值:[对象的字符串表示形式]

换句话说,它将显示对象的toString()而不是Matcher的不匹配描述。如果我使用来自org.hamcrest.MatcherAssert.assertThat的assertThat,则它将调用“describeMismatch”并显示更有帮助的错误消息。

我是否使用Junit不正确,还是当前没有版本的JUnit可以做到我想要的?大多数人都使用Hamcrest的assertThat吗?

3个回答

3

简短回答:不行。

据我所知,最新版本的Hamcrest(1.2)引入了与JUnit当前依赖的版本1.1不兼容的类型签名。我不确定Hamcrest变化造成的影响程度,但似乎JUnit团队没有急于升级(请参见开放问题)。

我不完全确定是否解决了我的问题,但我计划使用MatcherAssert.assertThat()。这可能需要特定版本的JUnit(我相信是junit-dep-xxx),它将不会与Hamcrest发生类路径冲突。否则,当assertThat()调用describeMismatch()时,您可能会收到NoSuchMethodErrors


谢谢。你使用Hamcrest的assertThat吗? - Jacob

1

是的,这个问题已经在JUnit 4.11中通过this commit得到解决:

正如Hamcrest的Steve Freeman所指出的,Matcher接口现在有一个额外的方法describeMismatch。为了安全地捕获这样的改进,使用MatcherAssert而不是重复其实现。

随着升级到Hamcrest 1.3(也在4.11中),这两个版本可以很好地配合使用。


0

使用其他版本assertThat(String, T, Matcher<T>),并在第一个参数中编写自己的消息,以便更好地描述失败情况。


2
谢谢,Boris。这是一种很好的创建描述的方法。然而,我更喜欢使用Matcher可以通过其“describeMismatch”方法生成的内置错误消息。 - Jacob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接