我正在用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()));
}

08-24 14:48