[英]JUnit4 : testing for expected exception
我試圖用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)
請參閱嵌套類 。
編輯:你需要將測試方法聲明為拋出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是一個經過檢查的異常。
CalcError
是Calculator
的內部類。 它不是由import calculator.*;
您必須添加import calculator.Calculator.CalcError
或限定CalcError
( expected=Calculator.CalcError.class
)。
將公共課作為內部課程並不是一個好主意。 您應該將其移動到自己的文件中。 只應嵌套私有類。 您可以通過使用Calculator.CalcError.class
訪問Error類,但我強烈建議不要使用它。
除此之外,我認為JUnit缺乏一些異常檢測功能,因為您無法設置消息。 我通過捕獲它們然后在應該拋出異常的方法調用之后調用Assert.fail
來對異常進行單元測試:
try {
someMethod();
Assert.fail("SomeException should have been thrown");
catch(SomeException se) {
}
由於CalcError是Calculator的內部類,因此您需要像這樣引用它
@Test(expected=Calculator.CalcError.class)
public void testDivision() {
由於這是一個經過檢查的異常,您需要向方法簽名添加throws Exception
,否則編譯器會抱怨異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.