首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JUnit未检测到ArithmeticException

JUnit未检测到ArithmeticException
EN

Stack Overflow用户
提问于 2014-09-02 19:07:23
回答 3查看 2.3K关注 0票数 1

我正在用JUnit练习,这是我想测试的简单方法

代码语言:javascript
复制
public float divide(int a, int b){
      return (float)a/(float)b;
}

这是测试(Math只是我的一个包含该方法的自定义类):

代码语言:javascript
复制
@Test(expected = ArithmeticException.class )
public void divideByZeroShouldBeDetected(){
    Maths m = new Maths();
    m.divide(2,0);
}

无论如何,运行此测试结果都会失败...

编辑: ok刚刚检查了一些“奇怪的”东西,这段代码实际上给了我一个异常:

代码语言:javascript
复制
float c = 2/0;

不管怎样,这一条:

代码语言:javascript
复制
m.divide(2,0);

给了我

代码语言:javascript
复制
Infinity

这就是测试失败的原因。在Junit中测试此行为的So..how?

EN

回答 3

Stack Overflow用户

发布于 2014-09-02 19:18:02

Ok solved....problem是关于参数类型的,在这篇文章中你可以找到一个完整的解释Java division by zero doesnt throw an ArithmeticException - why?

为了进行测试,我只需要断言返回值是“无限的”,这样:

代码语言:javascript
复制
@Test
public void divideByZeroShouldBeDetected(){
    Maths m = new Maths(2, 0);
    assertEquals("divide float by zero should be infinity", true, Float.isInfinite(m.divide()));
}
票数 3
EN

Stack Overflow用户

发布于 2014-09-02 19:23:08

还有,

为了清楚起见,ArithmeticException只对整数抛出,而不对浮点数抛出。

代码语言:javascript
复制
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。

票数 2
EN

Stack Overflow用户

发布于 2014-09-02 19:20:15

我认为你在数学课中的divide方法不能通过这个测试用例。

因为可被0或0.0整除的浮点数总是Infinity.Hence,所以你永远不会得到算术异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25621946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档