模拟未返回任何内容的强制转换对象时发生ClassCastException

时间:2018-08-21 14:41:13

标签: java casting mocking mockito

我对java还是很陌生,我想知道是否有人可以指出我正确的方向。 我正在尝试模拟(使用模仿)具有以下代码的方法:

package io.shido.event;

import org.junit.jupiter.api.Test;

final class PrototypeTest {
  @Test
  void instantiate() {
    final Prototype event = Prototype.???
  }
}

我在网上得到一个ClassCastException:

Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
channel.setInputStream(null);

例外情况如下:

((ChannelExec)channel).setCommand(command);

这是我的单元测试:

java.lang.ClassCastException: com.jcraft.jsch.Channel$$EnhancerByMockitoWithCGLIB$$15aeab7e cannot be cast to com.jcraft.jsch.ChannelExec

Channel是一个抽象类,ChannelExec是一个pojo

2 个答案:

答案 0 :(得分:2)

尝试

when(session.openChannel("exec")).thenReturn(channelExec);

存在差异,因为您当前正在返回抽象类的模拟并将其转换为其隐含形式之一。

答案 1 :(得分:2)

如果您希望openChannel返回ChannelExec

 Channel channel = session.openChannel("exec");
 ((ChannelExec)channel).setCommand(command);

您需要指定

when(session.openChannel("exec")).thenReturn(channelExec);