我正在用JUnit练习,这是我想测试的简单方法
public float divide(int a, int b){
return (float)a/(float)b;
}这是测试(Math只是我的一个包含该方法的自定义类):
@Test(expected = ArithmeticException.class )
public void divideByZeroShouldBeDetected(){
Maths m = new Maths();
m.divide(2,0);
}无论如何,运行此测试结果都会失败...
编辑: ok刚刚检查了一些“奇怪的”东西,这段代码实际上给了我一个异常:
float c = 2/0;不管怎样,这一条:
m.divide(2,0);给了我
Infinity这就是测试失败的原因。在Junit中测试此行为的So..how?
发布于 2014-09-02 19:18:02
Ok solved....problem是关于参数类型的,在这篇文章中你可以找到一个完整的解释Java division by zero doesnt throw an ArithmeticException - why?。
为了进行测试,我只需要断言返回值是“无限的”,这样:
@Test
public void divideByZeroShouldBeDetected(){
Maths m = new Maths(2, 0);
assertEquals("divide float by zero should be infinity", true, Float.isInfinite(m.divide()));
}发布于 2014-09-02 19:23:08
还有,
为了清楚起见,ArithmeticException只对整数抛出,而不对浮点数抛出。
package com.ey.buildmap;
public class test
{
public static void main(String[] args) {
try
{
//System.out.println(3/0);
System.out.println((float)5/(float)0);
}
catch(ArithmeticException e)
{
e.printStackTrace();
}
}
}我的意思是,在上面的例子中,System.out.println(3/0);将抛出ArithmeticException,而下一行不会抛出,因为结果将是Infinity。
发布于 2014-09-02 19:20:15
我认为你在数学课中的divide方法不能通过这个测试用例。
因为可被0或0.0整除的浮点数总是Infinity.Hence,所以你永远不会得到算术异常。
https://stackoverflow.com/questions/25621946
复制相似问题