首页 > 解决方案 > 在单元测试中从超类转换为子类失败(模拟)

问题描述

我以为我知道upcast和downcast的基本概念,但是我遇到的这个问题让我重新思考。

目前,它编译和工作完美无缺。但是当我尝试进行单元测试(通过使用 mockito)时,它一直指出我的转换方式存在问题。

我已经测试了我可以弥补的每一个可能的解决方案,但没有一个能满足这个 mockito 平台。

为了清楚起见,我为我的超类和子类制作了一个简化版本,如下所示:

@Entity
public class Parent{
  private String A;
  private String B;

  protected Parent(){
  }
// below are necessary getter setter n mapped column
...
}
--------------------------------
@Entity
public class Child extends Parent{
  private String C;
  private String D;

  protected Child(){
     super();
  }
// below are necessary getter setter n mapped column
...
}
---------------------------------

以上是我将用于向下转换的两个类和将执行以下操作的类:

public class People{
   public void CheckRelation(){
      Parent parent = new Child();
      parent = parentRepo(...); // to get some data
      Child child = (Child) parent;
   }
}

据我所知,这是进行向下转换的正确方法,但我遇到了一个问题,即通过 mockitoParent parent = new Child();给出错误The constructor Child() is not visible

由于我无法对 进行任何更改class Parent,因此我将class Child()构造函数从 protected 更改为 public(我知道这不是明智之举,也不应该这样做)。

这稍后会导致错误:

java.lang.ClassCastException:父不能投子

创建类Child是为了添加其他功能,Parent因为它不能再更改了。所以Child被用作处理特定数量数据的媒介,这就是为什么有必要向下转换Parentchild.

即使明智地编译它工作正常,我相信由于 java 运行时导致的这个 mockito 错误是它吗?还是因为其他原因?

感谢大家的任何明智的回答,谢谢

标签: javainheritancecastingmockitodowncast

解决方案


推荐阅读