模拟获取ClassCastException异常时

时间:2012-07-20 11:23:31

标签: java unit-testing mockito

我正在编写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("" , "" , "" , "");

2 个答案:

答案 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) {}