java - 在单元测试中从超类转换为子类失败(模拟)
问题描述
我以为我知道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
被用作处理特定数量数据的媒介,这就是为什么有必要向下转换Parent
为child
.
即使明智地编译它工作正常,我相信由于 java 运行时导致的这个 mockito 错误是它吗?还是因为其他原因?
感谢大家的任何明智的回答,谢谢
解决方案
推荐阅读
- react-native - 使用 codepush 即时更新
- android - 从android中的facebook成功登录后firebase facebook身份验证问题
- ruby-on-rails - 如何在 Rails 中使用连接查询?
- php - PHP - 在 CASE STATEMENT 中为 DB 中的两列使用 STRTOTIME
- c# - 将此 .RDL 代码转换为可读的 SQL 查询代码
- apache-nifi - NiFi 如何在 UpdateAttribute 处理器中获取更新的 JSON 值?
- jenkins - helm install stable/jenkins 失败:PodInitializing
- android - 检查 textview 中整个内容的高度是否大于 textview 的高度
- android - 客户端连接时 Master 停止广告后 Google Nearby API 出现问题
- java - 在日志行之前打印新行,使用 Java 中的日志框架