#java #junit #mockito #powermock
#java #junit #mockito #powermock
Вопрос:
Я тестирую метод, который возвращает приведенный тип объекта, но прямо сейчас я получаю java.lang.ClassCastException.
Я тестировал с макетным объектом и с объектом экземпляра, и я получаю тот же результат.
В моей реализации класс Employee расширяется из класса User.
Метод для тестирования в классе EmployeeDelegate:
public Employee getEmployeeByUsername(String username){
User user = userService.getUser(username);
return (Employee) user;
}
Модульный тест:
@Test
public void testGetEmployeeByUsername() {
User user = new User();
String username = "johnDoe";
Mockito.when(userDelegate.getUser(any(String.class))).thenReturn(user);
Employee response = employeeDelegate.getEmployeeByUsername(username);
}
Я также пытался сделать
User user = Mockito.mock(User.class)
Но все равно не работает
Я ожидаю, что статическое приведение работает правильно.
Комментарии:
1.
.thenReturn(user);
user
будучиUser
, а затем вы явно приводите кFrontOfficeEmployee
, как это должно когда-либо работать, как в тесте, так и в производственном коде.2. Почему у вас есть a,
userService
который возвращаетUser
s , метод, который утверждает, что возвращаетEmployee
, а на самом деле возвращаетFrontOfficeEmployee
?3. Я внес обновление в свой вопрос, на самом деле метод должен возвращать пользователя (Employee), а не пользователя (FrontOfficeEmployee).
Ответ №1:
FrontOfficeEmployee
Это User
, но User
не обязательно FrontOfficeEmployee
.
Ваш делегат должен вернуть новый экземпляр FrontOfficeEmployee
вместо нового User
.
Ответ №2:
Я исправляю это, делая следующее:
Я изменяю реализацию метода следующим образом:
public Employee getEmployeeByUsername(String username){
return (Employee) userService.getUser(username);
}
Затем модульный тестовый пример работает следующим образом:
@Test
public void testGetEmployeeByUsername(){
String username = "daegalle";
Employee user = Mockito.mock(Employee.class);
Mockito.when((Employee) userService.getUser(username)).thenReturn(user);
Employee response = employeeDelegate.getEmployeeByUsername(username);
Assert.assertEquals(user, response);
}