使用assertThat +时的NoSuchMethodError数据类型为short

时间:2018-05-11 11:41:27

标签: java junit4 hamcrest

我有一个班级,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));

该怎么办?

1 个答案:

答案 0 :(得分:1)

assertThat()的签名是assertThat(T actual, org.hamcrest.Matcher<T> matcher)

在你的情况下,T是:

所以你需要一个Matcher<Short>。但0是 int 文字。所以你必须告诉编译器:将该int值用作 short

尽管将0-int变为0-short是完全可以的,但Java还不够聪明。当你“限制”从int范围到短程的东西时,你必须放下那个演员。