Java 如何使用Mockito和JUnit测试静态类转换?

Java 如何使用Mockito和JUnit测试静态类转换?,java,junit,mockito,powermock,Java,Junit,Mockito,Powermock,我正在测试一个返回casted对象类型的方法,但现在我得到了一个java.lang.ClassCastException 我用模拟对象和实例对象进行了测试,得到了相同的结果 在实现中,我让Employee类从User类扩展而来 在课堂上测试EmployeeDelegate的方法: public Employee getEmployeeByUsername(String username){ User user = userService.getUser(username)

我正在测试一个返回casted对象类型的方法,但现在我得到了一个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)
但还是不行


我希望静态强制转换能够正常工作。

FrontOfficeEmployee是
用户
,但
用户
不一定是
FrontOfficeEmployee


您的学员应该返回一个新的
FrontOfficeEmployee
实例,而不是一个新的
用户

我将通过执行以下操作修复它:

我将方法实现更改如下:

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

。然后返回(用户)
如果
用户
用户
,然后您显式地将其转换为
FrontOfficeEmployee
,那么在测试和生产代码中该如何工作呢?为什么会有一个返回
用户
用户服务
,声称返回
员工
并实际返回
FrontOfficeEmployee
的方法?我在问题中做了更新,实际上该方法应该返回(员工)用户,而不是(FrontOfficeEmployee)。