我正在为一个方法编写一个JUnit测试用例,该方法有getValue()
方法返回一个Object,getValue()
返回我在setValue()
内传递的值,在这种情况下,当我将double值传递给setValue()
它会产生类强制转换异常。我无法弄清楚如何解决这个问题。
这是我正在测试的if条件,
Public class ImageToolsMemento
{
public static final int FREEROTATION=3;
private double _freeRotation;
public void combine(ImageToolsMemento obj) //test method
{
if(((Integer)(obj.getValue(FREEROTATION))).intValue() != 0)//line 224
_freeRotation = ((Integer)(obj.getValue(FREEROTATION))).intValue();
}
public Object getValue(int type)
{
Object ret;
switch(type)
{
case FREEROTATION:
default:
ret = null;
}
return ret;
}
public void setValue(double value, int type)
{
switch(type)
{
case FREEROTATION:
_windowPanelMemento.setValue(value, type);
break;
default:
//"default case"
break;
}
}
}
测试用例
public class ImageToolsMementoTest
{
@InjectMocks
ImageToolsMemento imageToolsMemento;
@Before
public void setUp() throws Exception
{
imageToolsMemento=new ImageToolsMemento();
}
@Test
public void testCombine()
{
imageToolsMemento.setValue(1.3, ImageToolsMemento.FREEROTATION);
imageToolsMemento.combine(imageToolsMemento);//calling test method, line 553
double _freeRotation=Whitebox.getInternalState(imageToolsMemento, "_freeRotation");
assertEquals(1.3,_freeRotation,0.0);
}
}
堆栈跟踪
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer
at com.toolboxmemento.ImageToolsMemento.combine(ImageToolsMemento.java:224)
at com.toolboxmemento.test1.ImageToolsMementoTest.testCombine(ImageToolsMementoTest.java:553)
任何人都可以帮我解决这个问题 P.S我无法改变实施
答案 0 :(得分:0)
在java中,您无法将java.lang.Double
投射到java.lang.Integer
。你的错误就行了:
if(((Integer)(obj.getValue(FREEROTATION))).intValue() != 0)//line 224
您可以使用intValue
类的Double
方法代替演员:
if(((Double)obj.getValue(FREEROTATION)).intValue() != 0)//line 224
答案 1 :(得分:0)
您需要执行显式类型转换,因为double不会隐式存储在int类型中。您可以通过以下方式执行此操作: int i =(int)d;