Java 测试除零

我正在尝试测试除以零的功能。


如果我这样做: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 = .. )


繁花不似锦
浏览 114回答 1
1回答

有只小跳蛙

答案:您正在将 x 转换为浮点数。因此,您没有像在第一个代码片段中那样进行整数除法,而是进行浮点除法。因此,结果就是 Infinity,这也不例外。但还有一点需要解释:    return (float) x/y;方法转换x为float((float) x) / y使用浮点运算执行计算返回值当您移除石膏时:    return x/y;方法x/y使用整数算术执行计算将值转换为浮点数(隐式!)返回值因此,实际上存在许多(潜在的)概念错误可能导致您犯下错误。类型转换的优先级高于/.使用 32 位浮点算术执行涉及 anint和 a 的算术运算。float(int操作数将被扩展为 a float)加宽也发生在“赋值上下文”中,语句return就是赋值上下文。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java