【问题标题】:Why Junit throws java.lang.ClassCastException even if classes are compatible and works fine in java code为什么即使类兼容并且在 java 代码中运行良好,Junit 也会抛出 java.lang.ClassCastException
【发布时间】:2018-12-17 06:32:57
【问题描述】:

我有 Car 类和 Vehicle 类。 和 Car 扩展 Vehicle。

当我为下面的方法编写 junit 时,它会给出类转换异常。 在类型铸造线上。

   void method(){
    // some code
    Car a = (Car)Vehicle;
    // some code
    }

它抛出异常为 java.lang.ClassCastException: com.abc.Vehicle 无法转换为 com.abc.Car

【问题讨论】:

  • 如果A扩展了B,你就不能写了。
  • 确定在测试源目录中没有同名的不同类?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用edit 链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!
  • 我们无能为力,只能猜测

标签: java junit junit5


【解决方案1】:

向上转换总是一种代码味道,应该避免。通常需要它,因为代码设计违反了告诉,不要问!原则。

只是猜测:
在您的情况下,“执行代码”始终传递 A 类的实例,以便它工作。但是您的测试显然设置了一个类 B 对象(在某些时候您没有显示),它无法转换为 A

【讨论】:

  • 只是猜测,但可能是正确的。尽管如此,这是一个非常糟糕的问题,但好吧,你弥补了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多