简体   繁体   English

无法在junit中捕获算术异常

[英]Cannot Catch arithmetic exception in junit

the method process is really throwing the exception however when I test this in junit is not working eventhough I placed next to the @Test annotation the expected exception to be thrown the test fails why is this happening? 方法过程确实引发了异常,但是当我在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");
}

You need to specify the Runner for your test class as: 您需要为测试类指定Runner:

@RunWith(JUnit4.class)

Plus your test function probably should not start with a capital letter ( C alculatorTestDivisionByZero). 另外,您的测试功能可能不应以大写字母( C alculatorTestDivisionByZero)开头。

The following works for me (ie the test passes): 以下对我有用(即测试通过):

@Test(expected=ArithmeticException.class)
public void CalculatorTestDivisionByZero(){
    int i = 23 / 0;
    System.out.println("i=" + i);
}

I don't need lowercase methods or @RunWith . 我不需要小写的方法或@RunWith

Maybe your calculator is starting a different thread or process? 也许您的计算器正在启动其他线程或进程? Then the Exception wouldn't be thrown in the test Thread. 这样就不会在测试线程中抛出异常。 You could also check whether you are importing the correct ArithmeticException class, there may be other ones provided by your application. 您还可以检查您是否正在导入正确的ArithmeticException类,您的应用程序可能还提供了其他类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM