为了账号安全,请及时绑定邮箱和手机立即绑定

Java 测试除零

Java 测试除零

繁花不似锦 2023-08-16 10:15:47
我正在尝试测试除以零的功能。如果我这样做: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;

方法

  1. 转换xfloat

  2. ((float) x) / y使用浮点运算执行计算

  3. 返回值

当您移除石膏时:

    return x/y;

方法

  1. x/y使用整数算术执行计算

  2. 将值转换为浮点数(隐式!)

  3. 返回值

因此,实际上存在许多(潜在的)概念错误可能导致您犯下错误。

  • 类型转换的优先级高于/.

  • 使用 32 位浮点算术执行涉及 anint和 a 的算术运算。floatint操作数将被扩展为 a float

  • 加宽也发生在“赋值上下文”中,语句return就是赋值上下文。


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信