当我进行 JUnit 测试时,我希望调试器在测试代码中抛出任何导致测试失败的异常时停止,以便检查错误所在。是否有可能配置 IntelliJ 的调试器来执行此操作,而不中断其他异常?
如果我在任何未捕获的异常上设置异常断点,这将不起作用,因为该异常已被 JUnit 捕获。如果我尝试在使用 catch 类 org.junit. 捕获的异常上也设置断点中断,那也不起作用,因为异常在到达 JUnit 之前被 Java 反射机制捕获并包装。所以我在这里有点不知所措 - Eclipse 只是在原始异常处停止。
澄清:我说的是我测试的代码或从那里调用的代码中的异常,而不是测试中的断言失败。例如,考虑这些测试:
@Test
public void thisShouldBreak() {
int i = 25 - 25;
int j = 17 / i;
}
private void neverBreakHereSinceThisIsCaught() {
int i = 14 - 14;
int j = 29 / i;
}
@Test
public void thisShouldNotBreak() {
try {
neverBreakHereSinceThisIsCaught();
} catch (ArithmeticException e) {
// ignored or handled
}
}
@Test
public void thisShouldNotBreakEither() {
try {
getClass().getDeclaredMethod("neverBreakHereSinceThisIsCaught").invoke(this);
} catch (Exception e) {
// ignored or handled
}
}
我希望 IntelliJ 在抛出 ArithmeticException 的地方执行测试 thisShouldBreak
时停止,以便我可以检查导致异常的 i 的值。但是,我不希望 IntelliJ 在 neverBreakHereSinceThisIsCaught
中停止,因为那里抛出的异常不会到达 JUnit。我尝试失败:
- 在 neverBreakHereSinceThisIsCaught 和其他地方的负载中捕获异常中断的异常断点。
- 仅在未捕获的异常上的异常断点根本不会命中,因为 JUnit 捕获并包装了这些异常。
- catch 类过滤器
org.junit.*` 在 JUnit 的许多内部位置中断,也结束了 JUnit 的 Java 反射调用。
最佳答案
这是我做的:
您基本上想要做的是告诉 Intellij 在 catch 类过滤器是 junit 的任何异常(捕获和未捕获)上停止,以便仅由 junit 捕获的异常会导致调试器停止。
当您使用像 Tomcat 这样的应用程序服务器时,您可能会遇到类似的问题,它会捕获异常。同样,您可以按 Tomcat 包过滤 catch 类。
关于java - Intellij-IDEA 是否可以配置为中断 JUnit 测试中的异常,从而导致测试失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44028088/