我正在编写CardManager.java类的单元测试代码,
执行单元测试代码时我得到: java.lang.ClassCastException:java.util.LinkedList无法强制转换为java.util.ArrayList
CardManager.java
对于下面一行我编码了单位测试代码的when条件。
ArrayList arr1= (ArrayList) getPanCardUtil().validatePanCard("" , "" , "" , "");
cardManagerTest.java
List<String> abc = new ArrayList<String>();
when(cardManager.validate("" , "" , "" , "").thenReturn(abc);
Validate.java
public List<String> validate("" , "" , "" , "");
答案 0 :(得分:1)
我怀疑这行
ArrayList arr1= (ArrayList) getPanCardUtil().validatePanCard("" , "" , "" , "");
应改为
List arr1= getPanCardUtil().validatePanCard("" , "" , "" , "");
在您发布的代码中,没有引用LinkedList
或任何其他对方法validatePanCard
的引用,但如果您同时使用这两种方法,则需要避免向下转换,并保留尽可能多地在界面层面上做所有事情。
如果您发布更完整的代码,则可能会隔离真正的问题。
此外,告诉我们您使用的模拟框架可能会有所帮助。我怀疑(仅从语法上)它是Mockito。
答案 1 :(得分:0)
从您提供的代码中不清楚方法是什么cardManager.validate(“”,“”,“”,“”)是(在cardmanagerTest.java中)?
我怀疑你在CardManager.java中有一个方法,它实现了Validate.java的方法验证
public LinkedList<String> validate(String v, String v2, String v3, String v4) {}
并且您的测试用例失败,因为它与此方法的返回类型不匹配,但与validate.java中的接口定义匹配。你应该只返回一个List类型。
public List<String> validate(String v, String v2, String v3, String v4) {}