【问题标题】:PowerMock / Mockito casting mocked objects not workingPowerMock / Mockito 铸造模拟对象不起作用
【发布时间】:2015-12-29 09:29:14
【问题描述】:

我在测试中初始化:

this.sessionMock = mock(Session.class);

在被测方法中:

((MySession)session).setRecordLimits(recordLimits)

给我:

 java.lang.ClassCastException:
 org.hibernate.Session$$EnhancerByMockitoWithCGLIB$$8561a329 
 cannot be cast to myApp.MySession

班级:

public class MySession extends AbstractSessionImpl implements EventSource

是 Mockito / Powermock 的问题还是 Hibernate 的问题?有什么解决办法吗?

【问题讨论】:

  • 试试 this.sessionMock = mock(MySession.class);

标签: java hibernate junit mockito powermock


【解决方案1】:

通过告诉 Mockito/Powermock 你想模拟Session,它无法知道你想模拟的类实际上是MySession

由于你的代码实际上依赖于MySession,你应该这样做

this.sessionMock = mock(MySession.class);

改为

【讨论】:

  • 它有效,但如果我能告诉 Mockito/Powermock 如何正确投射,我会更高兴。
  • 就是这样。 Mockito/Powermock 与施法动作无关。铸造不起作用,因为模拟不具有您正在寻找的类型。因此,当您创建模拟时,您需要告诉它正确的类型(通过传递正确的类来模拟)模拟应该承受的。
  • Adrian Shum - 我试过你的答案,但它对我不起作用。你知道是什么原因造成的吗?
  • 不工作是什么意思?生成的模拟没有实现您传入的类型?例外?你必须提供更多细节
  • 一些可能的问题: 1. 你传入的类型是一个具体的类(而不是接口)并且你使用的 Mockito 版本太旧了(它支持在某处内置的具体类模拟像 1.7) 2. 你传入的类型是最终类 3. 你只是有一个错字/错误的导入,这样你就不会嘲笑你想模拟的东西:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多