Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法捕获junit中的算术异常_Java_Unit Testing_Junit_Automated Tests - Fatal编程技术网

Java 无法捕获junit中的算术异常

Java 无法捕获junit中的算术异常,java,unit-testing,junit,automated-tests,Java,Unit Testing,Junit,Automated Tests,方法进程实际上是在抛出异常。然而,当我在junit中测试该异常时,即使我将预期的异常放置在@test注释旁边,该异常仍不起作用。测试失败。为什么会发生这种情况 java.lang.ArithmeticException: / by zero at com.javageek.junit.Calculator.process(Calculator.java:88) at com.javageek.junit.CalculatorTest.CalculatorTestDivisionByZero(Ca

方法进程实际上是在抛出异常。然而,当我在junit中测试该异常时,即使我将预期的异常放置在@test注释旁边,该异常仍不起作用。测试失败。为什么会发生这种情况

java.lang.ArithmeticException: / by zero
at com.javageek.junit.Calculator.process(Calculator.java:88)
at com.javageek.junit.CalculatorTest.CalculatorTestDivisionByZero(CalculatorTest.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)







@Test(expected=ArithmeticException.class)
public void CalculatorTestDivisionByZero(){
    Calculator calculator = new Calculator();
    calculator.process("DivisionByZero.txt");
}

您需要将测试类的运行程序指定为:

@RunWith(JUnit4.class)

另外,您的测试函数可能不应该以大写字母(CalculatorTestDivisionByZero)开头。

您需要将测试类的运行程序指定为:

@RunWith(JUnit4.class)

另外,您的测试函数可能不应该以大写字母(CAlculator TestDivisionByZero)开头。

以下内容对我有效(即测试通过):

我不需要小写方法或
@RunWith

也许你的计算器正在启动一个不同的线程或进程?那么异常就不会在测试线程中抛出。
您还可以检查是否导入了正确的算术异常类,您的应用程序可能提供了其他类。

以下内容适用于我(即测试通过):

我不需要小写方法或
@RunWith

也许你的计算器正在启动一个不同的线程或进程?那么异常就不会在测试线程中抛出。
您还可以检查是否导入了正确的算术异常类,您的应用程序可能还提供了其他类。

这是否可以帮助您?发布完整的stacktracejust更新了完整的StackTracePups这能帮到你吗?发布完整stacktracejust更新了完整StackTrace我没有扩展testClass虽然我没有扩展testClass虽然我认为你是对的异常不会在测试线程中抛出,因为我在测试中创建了一个对象,但是我如何捕获异常呢?你可以使用这个:,或者你可以围绕你的运行()方法和try-catch(可丢弃)块。然后,您可以将在块中获得的任何异常存储到其他地方,例如在测试类中的
公共静态ConcurrentLinkedQueue exceptions
中。在测试中,您随后断言您的异常队列为空。我认为您是对的,因为我正在测试中创建一个对象,所以不会在测试线程中引发异常,但如何捕获该异常呢?您可以使用以下命令:,也可以使用try-catch(Throwable)块围绕run()方法。然后,您可以将在块中获得的任何异常存储到其他地方,例如在测试类中的
公共静态ConcurrentLinkedQueue exceptions
中。在测试中,然后断言异常队列为空。