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


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

Class<CalcError> cannot be resolved to a type


这是CalcError的定义方式:

package calculator;

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

    public double getResult() throws CalcError {
        // ...
    }
}


我不理解为什么CalcError不是类型,即使单元测试在unit_tests包中并且计算器在calculator包中也是如此。

我想念什么?

最佳答案

CalcError是一个内部类,因此您需要使用

@Test(expected=Calculator.CalcError.class)


请参见Nested Classes

编辑:您还需要声明测试方法为引发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();
}


这是为了使编译器满意,因为Calculator.CalcError是一个检查的异常。

10-04 17:55