我正在为一个方法编写一个 JUnit 测试用例,该方法具有返回一个 Object 的getValue()
方法,getValue()
返回我在setValue()
内部传递的值,在这种情况下,当我将双精度值传递给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)
任何人都可以帮我解决这个问题吗 附言我无法更改实现
在 java 中,您不能将java.lang.Double
转换为java.lang.Integer
。您的错误在线:
if(((Integer)(obj.getValue(FREEROTATION))).intValue() != 0)//line 224
您可以使用Double
类intValue
方法代替强制转换:
if(((Double)obj.getValue(FREEROTATION)).intValue() != 0)//line 224
您需要执行显式类型转换,因为 double 不会隐式存储在 int 类型中。您可以通过以下方式执行此操作: int i = (int) d;