6

在我尝试过的每个 JUnit 版本(最高 4.8.1)中,失败的 assertThat 将显示如下错误消息:

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

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

我是在错误地使用 Junit,还是目前没有可以满足我要求的 JUnit 版本?大多数人会使用 Hamcrest assertThat 吗?

4

3 回答 3

3

简短的回答:没有。

据我所知,最新版本的 Hamcrest (1.2) 引入了与 JUnit 当前所依赖的 1.1 版本不兼容的类型签名。我不确定 Hamcrest 的变化造成的损害程度(可以这么说),但 JUnit 团队似乎并不急于升级(请参阅未解决的问题)。

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

于 2010-10-31T16:21:35.627 回答
1

是的,这是由JUnit 4.11中的此提交修复的:

正如 Hamcrest 的 Steve Freeman 所指出的,Matcher 接口现在有一个附加方法 describeMismatch。为了安全地在未来捕捉到这些改进,使用 MatcherAssert 而不是重复其实现。

随着升级到 Hamcrest 1.3(也在 4.11 中),这两个版本可以很好地协同工作。

于 2014-12-23T11:59:30.700 回答
0

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

于 2010-10-12T14:28:29.400 回答