我正在尝试测试除以零的功能。如果我这样做:System.out.println(5/0),我会得到java.lang.ArithmeticException我正在尝试测试是否引发了异常。这是我的单元测试: @Test(expected = ArithmeticException.class) public void given_divideByZeroInput_when_divideByZero_then_verify_throwing_exception() { MathClass sut = new MathClass(); sut.div(10,0); }我的div就是这么简单: public float div(int x, int y) { return (float) x/y; }但是,单元测试失败,指出:java.lang.AssertionError: Expected exception: java.lang.ArithmeticException我做错了什么?我知道有很多方法可以测试抛出的异常,但我试图坚持使用简单的方法@Test(excepted = .. )
1 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
答案:
您正在将 x 转换为浮点数。因此,您没有像在第一个代码片段中那样进行整数除法,而是进行浮点除法。因此,结果就是 Infinity,这也不例外。
但还有一点需要解释:
return (float) x/y;
方法
转换
x
为float
((float) x) / y
使用浮点运算执行计算返回值
当您移除石膏时:
return x/y;
方法
x/y
使用整数算术执行计算将值转换为浮点数(隐式!)
返回值
因此,实际上存在许多(潜在的)概念错误可能导致您犯下错误。
类型转换的优先级高于
/
.使用 32 位浮点算术执行涉及 an
int
和 a 的算术运算。float
(int
操作数将被扩展为 afloat
)加宽也发生在“赋值上下文”中,语句
return
就是赋值上下文。
添加回答
举报
0/150
提交
取消