我有一个班级,public short status
,这一行在测试中:
assertThat(order.status, is(0));
但它给了我以下错误:
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18)
at org.junit.Assert.assertThat(Assert.java:956)
at org.junit.Assert.assertThat(Assert.java:923)
at com.example.OrderTest.testStuff(OrderTest.java:101)
...
但是,如果我执行以下操作,那将是更加丑陋的错误:
assertThat(order.status, is((short) 0));
该怎么办?
答案 0 :(得分:1)
assertThat()
的签名是assertThat(T actual, org.hamcrest.Matcher<T> matcher)
在你的情况下,T是:短
所以你需要一个Matcher<Short>
。但0是 int 文字。所以你必须告诉编译器:将该int值用作 short 。
尽管将0-int变为0-short是完全可以的,但Java还不够聪明。当你“限制”从int范围到短程的东西时,你必须放下那个演员。