Исключение Classcast при использовании mockito

Я получаю исключение classcast, используя следующий фрагмент кода в тестовом примере.

  Employee employee1= new Employee();
  Employee employee2= new Employee();
  Employee employee3= new Employee();
  int id=1234;

  when(employee1.getID()).thenReturn(id);
  when(employee2.getID()).thenReturn(id);
  when(employee3.getID()).thenReturn(id);

Я хочу обобщить это как

 when((((Employee)Matchers.any(Employee.class)).getID())).thenReturn(id);

Я делаю что-то не так?

java.lang.ClassCastException: org.hamcrest.core.IsInstanceOf cannot be cast to com.site.model.Employee

person Patan    schedule 04.08.2014    source источник


Ответы (2)


Привет, я знаю, что это очень старый вопрос, однако сегодня я сам столкнулся с этой же проблемой.

В любом случае, это связано с тем, как hamcrest обрабатывает Matchers. Я в основном не возвращаю данный тип, а обертку вокруг него.

Самый простой способ исправить это - использовать любой из mockito, а не hamcrest, например.

when((((Employee)org.mockito.Matchers.any(Employee.class)).getID())).thenReturn(id); 

Дополнительные сведения см. в этом ответе: сравнение с сопоставлениями mockito и hamcrest

Надеюсь, это поможет любому, кто спотыкается об это;)

person Nikos T    schedule 10.10.2018
comment
Крутой ответ! Единственное изменение заключается в использовании org.mockito.ArgumentMatchers.any, так как org.mockito.Matchers.any устарело. - person jumping_monkey; 28.05.2021

Если вы обнаружите, что вам нужно приведение типов при использовании Mockito, то у вас обычно что-то не так.

Я думаю, вы пытаетесь сделать что-то вроде:

    Employee employee = Mockito.mock(Employee.class);
    when(employee.getId()).thenReturn(id);
person Steve C    schedule 04.08.2014
comment
Здесь сотрудник не закреплен. Мне нужно вернуть то же самое для экземпляра employee1 или employee2. Можешь подсказать как это сделать - person Patan; 04.08.2014
comment
Вы должны показать больше своего тестового кода, чтобы мы могли получить некоторый контекст - person Steve C; 04.08.2014
comment
Извините за ограниченную информацию. Я обновил вопрос. Можешь мне помочь. - person Patan; 04.08.2014
comment
Какую часть логики вы пытаетесь проверить? - person Steve C; 04.08.2014
comment
Оно должно быть независимым от логики. Мне просто нужно вернуть постоянное значение, когда метод вызывается для всех тестовых случаев. - person Patan; 04.08.2014