JUnit4:测试预期的异常

Jér*_*ôme 2 java junit junit4

我试图用JUnit4测试抛出异常的方法.这是代码片段:

package unit_tests;

import org.junit.Test;
import calculator.*;

@Test(expected=CalcError.class)
public void testDivision() {
    Calculator myCalc = new Calculator(10, 0);
    myCalc.setOperation(Calculator.Operation_e.DIVIDE);
    myCalc.getResult();
}
Run Code Online (Sandbox Code Playgroud)

问题在于@Test(expected=CalcError.class):我收到以下错误:

Class<CalcError> cannot be resolved to a type
Run Code Online (Sandbox Code Playgroud)

以下是如何CalcError定义:

package calculator;

public class Calculator {
    public class CalcError extends Exception {
        // ...
    }

    public double getResult() throws CalcError {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么CalcError不是一个类型,即使单元测试在一个unit_tests包中并且计算器在一个calculator包中.

我错过了什么?

Mat*_*ell 7

CalcError是一个内部类,所以你需要使用

@Test(expected=Calculator.CalcError.class)
Run Code Online (Sandbox Code Playgroud)

请参阅嵌套类.

编辑:你需要将测试方法声明为抛出Calculator.CalcError:

@Test(expected=Calculator.CalcError.class)
public void testDivision() throws Calculator.CalcError {
    Calculator myCalc = new Calculator(10, 0);
    myCalc.setOperation(Calculator.Operation_e.DIVIDE);
    myCalc.getResult();
}
Run Code Online (Sandbox Code Playgroud)

这是为了取悦编译器,因为Calculator.CalcError是一个经过检查的异常.