在我尝试过的每一个版本的Junit(最多4.8.1)中,失败的断言将显示一条错误消息,看起来像:

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

换句话说,它将显示对象的tostring(),而不是匹配器的不匹配描述。如果我使用org.hamcrest.matcherassert.assertthat的essertthat,那么它将称为“ Defictemismatch”并显示一个更有帮助的错误消息。

我是在错误地使用Junit还是当前没有Junit版本可以做我想要的?大多数人是否使用汉克雷斯特断言?

有帮助吗?

解决方案

简短答案:否。

据我所知,Hamcrest(1.2)的最新版本引入了与1.1版不相容的类型签名,Junit当前依赖于该版本。我不确定Hamcrest的变化所造成的损害程度(可以这么说),但看来Junit团队急于升级(请参阅 公开问题).

我不确定我已经解决了我的问题,但我打算使用 MatcherAssert.assertThat(). 。这可能需要特定的Junit(我相信Junit-Dep-XXX)的特定释放,这不会与Hamcrest发生集体路径冲突。否则您可能会收到 NoSuchMethodErrors 什么时候 assertThat() 打电话 describeMismatch().

其他提示

是的,这是由 这个提交Junit 4.11:

正如Hamcrest的Steve Freeman指出的那样,Matcher接口现在有一个其他方法描述。为了确保未来获得此类改进,使用MatcherAssert而不是复制其实施。

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

使用 其他版本 assertThat(String, T, Matcher<T>) 在第一个参数中,写下您自己的消息,这将使您更好地描述失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top