我正在尝试测试零除的功能。
如果我只是做: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);
}
Run Code Online (Sandbox Code Playgroud)
我的div就是这么简单:
public float div(int x, int y) {
return (float) x/y;
}
Run Code Online (Sandbox Code Playgroud)
但是,单元测试失败,说明:
java.lang.AssertionError: Expected exception: java.lang.ArithmeticException
Run Code Online (Sandbox Code Playgroud)
我做错什么了?
我知道有很多方法可以测试抛出的异常,但是我试图坚持简单的方法 @Test(excepted = .. )
JB Nizet找到了答案:
您正在将x强制转换为浮点数。因此,您没有像在第一个代码片段中那样进行整数除法,而是进行了浮点除法。结果就是无限,也不例外。
但是还有更多要解释的东西:
return (float) x/y;
Run Code Online (Sandbox Code Playgroud)
手段
x为float((float) x) / y使用浮点算法执行计算删除演员表时:
return x/y;
Run Code Online (Sandbox Code Playgroud)
手段
x/y使用整数算术执行计算因此,实际上存在许多(潜在的)概念性错误,这些错误可能导致您犯了错误。
/。int和a的float算术运算。(int操作数将扩大为float)return语句是分配上下文。| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |