是否有一个版本的 JUnit assertThat 使用 Hamcrest“describeMismatch”?功能?
在我尝试过的每个版本的 JUnit 中(直到 4.8.1),失败的断言都会显示一条错误消息,如下所示:
预期:[describeTo]
got: [对象的字符串表示]
换句话说,它将显示对象的 toString(),而不是来自 Matcher 的不匹配描述。如果我使用 org.hamcrest.MatcherAssert.assertThat 中的assertThat,那么它将调用“describeMismatch”并显示更有用的错误消息。
我是否错误地使用了 Junit,或者目前没有 JUnit 版本可以实现我想要的功能?那么大多数人都使用 Hamcrest 断言吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
简短的回答:不。
据我所知,最新版本的 Hamcrest (1.2) 引入了与 JUnit 当前依赖的版本 1.1 不兼容的类型签名。我不确定 Hamcrest 的更改所造成的损害程度(可以这么说),但 JUnit 团队似乎并不急于升级(请参阅 未解决的问题)。
我不完全确定我已经解决了我的问题,但我计划使用
MatcherAssert.assertThat()
。这可能需要特定版本的 JUnit(我相信是 junit-dep-xxx),它不会与 Hamcrest 发生类路径冲突。否则,当assertThat()
调用describeMismatch()
时,您可能会收到NoSuchMethodErrors
。Short answer: no.
As far as I can tell, the most recent version of Hamcrest (1.2) has introduced type signatures which are incompatible with version 1.1, which JUnit currently depends on. I am not sure the extent of the damage (so to speak) created by the change in Hamcrest, but it does not appear that the JUnit team are in any hurry to upgrade (see the open issue).
I am not entirely sure I have solved my issue, but I am planning to use
MatcherAssert.assertThat()
. This can require a specific release of JUnit (junit-dep-xxx I believe) which will not have classpath conflicts with Hamcrest. Otherwise you may receiveNoSuchMethodErrors
whenassertThat()
makes the call todescribeMismatch()
.是的,这个问题已由 此提交修复/github.com/junit-team/junit/blob/e4c92d479b18b6c26a22cace23f33aedd116c116/doc/ReleaseNotes4.11.md" rel="nofollow">JUnit 4.11:
随着升级到 Hamcrest 1.3(也在 4.11 中),这两个版本都可以使用在一起很好。
Yes, this is fixed by this commit in JUnit 4.11:
Along with the upgrade to Hamcrest 1.3 (also in 4.11), these two versions work well together.
使用 其他版本
assertThat(String, T, Matcher)
并在第一个参数中编写您自己的消息,以便更好地描述失败。Use the other version
assertThat(String, T, Matcher<T>)
and in the first argument write your own message that will give you a better description of the failure.