【发布时间】:2019-03-07 07:41:42
【问题描述】:
我正在尝试学习本教程JUnit 5: How to assert an exception is thrown?
我使用 Java 10、IntelliJ 2018 和 Junit 5。
我制作了一个计算器应用程序,可以将 2 个分数相加。它检查输入的分母是否为 0。
当我运行测试时,打印出异常消息“未定义的数学表达式”,但我的 IDE 显示“预期 java.lang.Throwable 被抛出,但没有抛出任何东西。”我认为我的代码范围有问题?我是新手,请多指教。我提供了以下代码和测试:
public class Calculator {
public static int[] calculate (int firstNumerator, int firstDenominator, int secondNumerator, int secondDenominator) {
String exceptionMessage = "Undefined Math Expression";
int resultNumerator;
int resultDenominator;
int[] result = new int[2];
resultNumerator = (firstNumerator * secondDenominator) +
(secondNumerator * firstDenominator);
resultDenominator = firstDenominator * secondDenominator;
try {
if (resultDenominator == 0) {
throw (new Throwable(exceptionMessage));
} else {
result[0] = resultNumerator;
result[1] = resultDenominator;
}
} catch (Throwable e) {
System.out.println(e.getMessage());
}
return result;
}
}
测试:
class CalculatorTest {
@Test
void denominatorContainsZero() {
assertThrows(Throwable.class, () -> {
Calculator.calculate(0,0,0,0);
});
}
}
【问题讨论】:
-
你应该很少看到
Throwable;你应该(有效地)永远抛出Throwable。在这种情况下,例外是完全没有必要的:只需打印消息。