java JUnit未检测到算术异常
我正在使用JUnit进行练习,这是我想要测试的简单方法
public float divide(int a, int b){
return (float)a/(float)b;
}
这是测试(数学只是我的一个自定义类,包含该方法):
@Test(expected = ArithmeticException.class )
public void divideByZeroShouldBeDetected(){
Maths m = new Maths();
m.divide(2,0);
}
无论如何,运行此测试会导致失败
编辑: 好的,刚刚检查了一些“奇怪的”,这段代码实际上给了我一个异常:
float c = 2/0;
不管怎样,这个:
m.divide(2,0);
给我
Infinity
这就是测试失败的原因。所以如何在Junit中测试这种行为
# 1 楼答案
我认为你在数学课上的划分方法不正确,不能通过这个测试
因为可以被0或0.0整除的浮点数总是无穷大。因此,您永远不会得到算术异常
# 2 楼答案
而且
为了澄清,算术异常只针对整数而不是浮点抛出
我的意思是,在上面的例子中, 系统出来println(3/0); 将抛出算术异常,而下一行不会抛出,因为结果将是无穷大
# 3 楼答案
好的,解决了。。。。问题是关于参数的类型,在这篇文章中你可以找到一个完整的解释Java division by zero doesnt throw an ArithmeticException - why?
为了进行测试,我只需断言返回值为“无限”,如下所示: