Hamcrest describeMismatchSafely 总是打印 Object.toString() 插入我的实现

Mau*_*zik 5 java junit hamcrest

我编写了一个自定义匹配器来比较我的对象。除了 describeMismatchSafely 方法之外,其他一切都有效。我一直简单地重复,直到我得到这个:

public static TypeSafeMatcher<IMyObj > equalTo(final IMyObj expected) {

    return new TypeSafeMatcher<IMyObj >() {

        @Override
        public void describeTo(final Description description) {
            description.appendText("this value");
        }

        @Override
        public void describeMismatchSafely(final IMyObj myObj, final Description mismatchDescription) {
            mismatchDescription.appendText(" the wrong value");
        }

        @Override
        protected boolean matchesSafely(IMyObj actual) {
            return false;
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

方法 describeTo 工作得很好,但 describeMismatchSafely 总是打印 myObj.toString() 而不是我想要的消息:

java.lang.AssertionError:预期:这个值得到:

我在 google 上搜索了自定义匹配器的实现,似乎每个人都覆盖了 describeMismatchSafely 方法,而且它对他们来说工作得很好。有没有理由我的不应该工作?

Joe*_*Joe 1

如果您使用 JUnit,org.junit.Assert#assertThat请升级到 JUnit 4.11 以修复错误