我正在用JUnit练习,这是我要测试的简单方法
public float divide(int a, int b){
return (float)a/(float)b;
}
这是测试(Maths只是包含该方法的我的自定义类):
@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中测试此行为?
最佳答案
好了,解决了...问题是关于抛物线的类型,在这篇文章中您可以找到完整的解释Java division by zero doesnt throw an ArithmeticException - why?。
为了进行测试,我只需要断言返回值是“ infinite”,这种方式是:
@Test
public void divideByZeroShouldBeDetected(){
Maths m = new Maths(2, 0);
assertEquals("divide float by zero should be infinity", true, Float.isInfinite(m.divide()));
}