У меня есть определенный метод, который предоставляет объект Restriction
(где Restriction
- это интерфейс). И поскольку его реализация уже является testet, я просто хочу проверить, действительно ли мой метод предоставляет объект RestrictionImpl
.
Я видел, что есть сокеты, которые я могу использовать вместе с assertThat
, и я подумал, что для этой задачи нужен предмет isA
.Как использовать isA-Matcher
Упрощенный мой код выглядит следующим образом:
public static Restriction getRestriction() {
return new RestrictionImpl();
}
и мой тест выглядит так;
@Test
public void getRestriction_returnsRestrictionImpl() {
assertThat(getRestriction(), isA(RestrictionImpl.class));
}
Однако это не скомпилируется. Все, что я мог сделать, это проверить, если RestrictionImpl
- это Restriction
... но в этом нет никакого смысла.
Неужели я не понимаю цели isA
? И для чего это необходимо?
UPDATE:
Использование assertThat(getRestriction(), is(instanceOf(RestrictionImpl.class)))
будет работать, но я думал, что isA
ярлык именно для этой цели.
Вызов assertThat
в том, как я хочу требует его иметь подпись assertThat(T, Matcher<? extends T>)
, но его подпись assertThat(T, Matcher<? super T>)
Я думаю, что вы имеете в виду 'assertThat (getRestriction(). GetClass(), isA (RestrictionImpl.class))' или 'assertThat (getRestriction(), isA (instanceOf (RestrictionImpl.class))). – PEdroArthur
оба не скомпилируются. Hower testing 'assertThat (getRestriction(), is (instanceOf (RestrictionImpl.class))' будет работать, но я, хотя 'isA' является ярлыком к этому. – danielspaniol
Подпись assertThat является' assertThat (T actual, Matcher super T> matcher) ' требует, чтобы тип Matcher был равен super T>. Но в вашем коде 'RescrictionImpl.class' не является типом' Rescriction.class', поэтому компиляции не удалось. Чтобы решить эту проблему, вы можете либо изменить свой код на 'assertThat (getRestriction(), isA (Restriction.class)); или изменить подпись getRestriction на 'public static RestrictionImpl getRestriction()'. – walsh