当前位置: 首页 > 知识库问答 >
问题:

JUnit不检测AlithmeticException

胡璞瑜
2023-03-14

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

无论如何,运行此测试将导致失败...

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

float c = 2/0;

不管怎么说,这一个:

m.divide(2,0);

给了我

Infinity

这就是测试失败的原因。那么...如何在JUnit中测试这种行为呢?

共有1个答案

华萧迟
2023-03-14

问题是关于参数的类型,在这篇文章中,你可以找到一个完整的解释:Java除以零不抛出一个算术异常-为什么?。

为了进行测试,我只需断言返回的值是“infinite”,如下所示:

@Test
public void divideByZeroShouldBeDetected(){
    Maths m = new Maths(2, 0);
    assertEquals("divide float by zero should be infinity", true, Float.isInfinite(m.divide()));
}
 类似资料:
  • 我主要使用本教程为Maven配置Junit:http://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html 我有一个测试类,当我执行“mvn测试”时,这个测试类被Maven捕获,但Maven没有检查它(结果应该是失败)。 我的测试类位于src/main/resources中(控制台显示“复制1个资源”): 我的P

  • 新的Spring靴。 控制器中的API看起来像, 测试用例看起来像, 现在,在运行测试用例(命令1)后,我得到了以下结果 “java.lang.AssertionError:预期状态: 但“命令2”如期成功。 我的问题是, RestController Prefix Path Controller Prefix Path=整个路径。 为了调用API,我们必须遵循上面的格式,但是如果遵循相同的内容,

  • 我正在使用Eclipse中的 JUnit5位于modul-path上,并且在module-info.Java中是必需的。 当我尝试运行代码时,总是会收到以下消息: 初始化引导层java.lang.module.findException时出错:无法为C:\users\tim hp.p2\pool\plugins\org.junit.jupiter.migrationsupport_5.0.0.v2

  • 我有一个带有Java配置类的Spring(4.2.5)项目。这些在正常运行项目时起作用,但我无法使我的测试工作。在下面的测试中,为空。 如果添加注释,则会出现异常 其中和在和中定义,后者是基于活动配置文件选择的。 [编辑2] 经过更多的搜索,我发现了这个问题,并且在检查了我的依赖项之后,我发现我在maven依赖项下有Spring-Core-4.1.9,而且我没有在我的POM中包含一个依赖项。添加依

  • Junit方法的返回类型是什么。所以我总是看到返回类型使用Void,所以我们可以改变返回类型吗? 现在,有时会出现这样的问题,比如我是否可以使用JUnit测试私有方法。因此,据我所知,Junit默认调用以test开头的方法,它应该是公共的,然后只有它才能使用Junit在类外部调用。因此,如果我声明一个测试方法为私有的,Junit将如何调用它或在类外测试它。

  • Windows 7 Java 1.8.0_45 月食火星 如果将系统代理设置为HTTP,则下面的代码仅在从java应用程序的方法运行时才会打印。