【问题标题】:Classcast exception when using mockito使用 mockito 时的 Classcast 异常
【发布时间】:2014-08-04 14:15:30
【问题描述】:

我在测试用例中使用以下代码得到类转换异常。

  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

【问题讨论】:

    标签: java junit mockito junit4


    【解决方案1】:

    您好,我知道这是一个非常古老的问题,但是我今天自己也遇到了同样的问题。

    无论如何,这与 hamcrest 处理 Matchers 的方式有关。我基本上不返回给定的类型,而是返回一个包装器。

    修复它的最简单方法是使用任何来自 mockito 而不是 hamcrest 例如

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

    更多详情请看这个答案:comparison with mockito and hamcrest matchers

    希望它能帮助任何遇到这个问题的人;)

    【讨论】:

    • 很酷的答案!唯一的变化是使用org.mockito.ArgumentMatchers.any,因为org.mockito.Matchers.any 已被弃用。
    【解决方案2】:

    如果您在使用 Mockito 时发现需要进行类型转换,那么您通常有问题。

    我猜你正在尝试做类似的事情:

        Employee employee = Mockito.mock(Employee.class);
        when(employee.getId()).thenReturn(id);
    

    【讨论】:

    • 这里的员工不固定。我需要为实例employee1 或employee2 返回相同的东西。你能建议怎么做吗
    • 你应该展示更多你的测试代码,以便我们可以得到一些上下文
    • 抱歉信息有限。我已经更新了这个问题。你能帮帮我吗?
    • 你要测试什么逻辑?
    • 独立于逻辑。当为所有测试用例调用该方法时,我只需要返回一个常量值。
    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多