NoSuchMethodError при использовании assertThat + с коротким типом данных - PullRequest
0 голосов
/ 11 мая 2018

У меня есть класс с 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 голосов
/ 11 мая 2018

Подпись assertThat() равна assertThat(T actual, org.hamcrest.Matcher<T> matcher)

T, в вашем случае: short

Так что вам нужно Matcher<Short>.Но 0 - это int литерал.Поэтому вы должны сказать компилятору: используйте это значение типа int как short .

Хотя было бы неплохо превратить 0-int в 0-short, Java не достаточно умен.Поскольку вы «ограничиваете» что-то от диапазона int до короткого диапазона, вы должны отложить это приведение.

...