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

时间:2019-04-01 16:23:46

标签: 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)

但仍然不起作用

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

2 个答案:

答案 0 :(得分:1)

FrontOfficeEmployeeUser,但是User不一定是FrontOfficeEmployee

您的委托人应返回FrontOfficeEmployee的新实例,而不是新的User

答案 1 :(得分:0)

我将其修复为下一件事:

我将方法实现更改如下:

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