gpt4 book ai didi

Java 测试除零

转载 作者:行者123 更新时间:2023-12-02 04:18:59 25 4
gpt4 key购买 nike

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

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

最佳答案

JB Nizet 找到了答案:

You're casting x to a float. Thus you're not doing integer division as you're doing in your first snippet, but float division. And the result is thus Infinity, not an exception.

但是还有一些事情需要解释:

    return (float) x/y;

表示

  1. x 转换为 float
  2. 使用浮点运算执行((float) x)/y计算
  3. 返回值

当您移除石膏时:

    return x/y;

表示

  1. 使用整数算术执行x/y计算
  2. 将值转换为 float (隐式!)
  3. 返回值

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

  • 类型转换的优先级高于 /
  • 涉及 intfloat 的算术运算是使用 32 位浮点算术执行的。 (int 操作数将扩展为 float)
  • 扩展也会发生在“赋值上下文”中,而 return 语句就是赋值上下文。

关于Java 测试除零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58038275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com