我正在尝试学习这篇教程JUnit 5:如何断言一个异常被抛出?
我使用Java10、IntelliJ2018和JUnit5。
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);
});
}
}
这里的误解似乎在于JUnit实际上可以看到的东西。
JUnit并不神奇:它只是普通的旧Java。它不能看到你的方法内部来看到它们在做什么。它所能看到的就是任何其他代码在执行方法时所能看到的:返回值和未捕获的异常(以及该方法的任何副作用,如果它们对调用代码可见的话)。
这里的方法不是从调用方的角度抛出异常:在内部,它抛出了异常,但它捕获并处理它。
抛出一个异常然后自己捕获并处理它从来不是(*)正确的做法。有什么意义?您可以简单地做您所做的事情来处理它,而不引发异常。抛出异常的代价很高,因为需要捕获整个堆栈跟踪。
throwable
从来不是(*)要抛出的正确异常。它是返回object
的异常“等价物”:它不向调用方传递关于异常的类型信息,然后调用方要么必须做大量工作来尝试处理它;或者,更现实地说,应该自己传播。IllegalArgumentException
是在这里抛出的正确异常,如果您实际上需要抛出(而不是捕获)一个异常。
throwable
很少是正确的捕捉对象。throwable
是exception
和error
的超级类型,因此您可能会无意中捕获到error
(如outofmemoryerror
),它不应该被捕获,因为除了使程序崩溃之外,没有任何合理的操作可做。抓住你能抓住的最具体的类型;这也意味着您应该抛出您所能抛出的最具体的类型(或者,至少是一个适合于抽象的类型)。
(*)这与“OK,在有限的几种情况下可能是适当的”中的“绝不”相同。但除非你明白这些是什么,否则不要。
我们在客户端上安装了我们的根证书,https连接适用于。 但是如果我们尝试使用,它会失败: 证书在客户端上。见: 版本:PIP1.4。1.
问题内容: 我在主软件包的一个目录下有一些文件: main.go config.go server.go 当我这样做时:“执行构建”程序将完美构建并运行良好。当我这样做时:“ go run main.go”失败了。 输出: 未定义的符号是结构,并且大写,因此应将其导出。 我的Go版本:go1.1.2 linux / amd64 问题答案: 这应该工作 Go run需要一个文件或多个文件,并且它仅合
我已经查看了所有关于CORS错误的其他问题,但运气不好。我正在NuxtJS客户端应用程序中发出一个简单的POST请求。如果我使用axios,我会得到CORS错误,但如果我使用fetch,它工作得很好。我想使用axios,但我无法解决这个问题。服务器设置了正确的“Access Control Allow Origin”标头(删除该标头时,以下两个选项都不起作用)。有人知道为什么fetch可以工作,但
我对Jest是新手,目前只是在玩一些现有功能的测试。我有一个函数,它获取一个数据数组(来自JSON文件),并将其映射到特定的位置,绘制点。 这是功能点: plotPoint将JSON数据作为参数。该函数之所以有效,是因为它在控制台中正确记录数据,而其他功能按预期工作。 但测试总是失败: 绘图点。测验js 返回此错误: 我认为可能函数是在jsonfile之前的测试中运行的。json已加载,因此我尝试
我有一个JDK1.7项目,在我的maven repo中有一个本地jar的maven依赖项。 我无法使用Intellij构建项目,错误是找不到一个符号(该符号是一个从本地jar导入包的类) 但是我可以使用'mvn包‘成功地构建项目。 我花了很多时间寻找解决办法,我已经做了很多事情: 无效缓存 “mvn clean install”本地jar依赖项 在IntelliJ的maven配置中标记为“自动加载
Windows---------------: Linux---------- 那么,什么是主要的原因是这个问题,看起来一切都好从其他的选择 Apache Maven 3.6.0(97C98EC64A1FDFEE7767CE5FFB20918DA4F719F3;2018-10-24T14:41:47-04:00)Maven主页:/home/user/tools/Maven/apache-maven