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

发布于 2024-09-26 23:37:10 字数 323 浏览 5 评论 0 原文

在我尝试过的每个版本的 JUnit 中(直到 4.8.1),失败的断言都会显示一条错误消息,如下所示:

预期:[describeTo]
got: [对象的字符串表示]

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

我是否错误地使用了 Junit,或者目前没有 JUnit 版本可以实现我想要的功能?那么大多数人都使用 Hamcrest 断言吗?

In every version of JUnit I have tried (up to 4.8.1), a failing assertThat will display an error message that looks like:

expected: [describeTo]
got: [String representation of object]

In other words, it will display the toString() of the object instead of the mismatch description from the Matcher. If I use the assertThat from org.hamcrest.MatcherAssert.assertThat, then it will call 'describeMismatch' and display a more helpful error message.

Am I using Junit incorrectly or is there currently no version of JUnit that will do what I want? Do most people use the Hamcrest assertThat then?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

热鲨 2024-10-03 23:37:11

简短的回答:不。

据我所知,最新版本的 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 receive NoSuchMethodErrors when assertThat() makes the call to describeMismatch().

人海汹涌 2024-10-03 23:37:11

是的,这个问题已由 此提交修复/github.com/junit-team/junit/blob/e4c92d479b18b6c26a22cace23f33aedd116c116/doc/ReleaseNotes4.11.md" rel="nofollow">JUnit 4.11:

正如 Hamcrest 的 Steve Freeman 所指出的,Matcher 界面现在
有一个附加方法describeMismatch。为了安全地捕捉这样的
未来的改进,使用MatcherAssert代替
重复其实现。

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

Yes, this is fixed by this commit in JUnit 4.11:

As pointed out by Steve Freeman of Hamcrest, the Matcher interface now
has an additional method describeMismatch. To be safe to catch such
improvements in the future, MatcherAssert is used instead of
duplicating its implementation.

Along with the upgrade to Hamcrest 1.3 (also in 4.11), these two versions work well together.

尸血腥色 2024-10-03 23:37:11

使用 其他版本 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文