Как я могу проверить приведение статического класса с помощью Mockito и JUnit? - PullRequest
0 голосов
/ 01 апреля 2019

Я тестирую метод, который возвращает приведенный тип объекта, но сейчас я получаю исключение 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)

Но все равно не работает

Я ожидаю, что статическое приведение работает правильно.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

A FrontOfficeEmployee является User, но User не обязательно является FrontOfficeEmployee.

Ваш делегат должен вернуть новый экземпляр FrontOfficeEmployee вместо нового User.

0 голосов
/ 01 апреля 2019

Я исправляю это следующим образом:

Я изменяю реализацию метода следующим образом:

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);
}
...