gpt4 book ai didi

java - Intellij-IDEA 是否可以配置为中断 JUnit 测试中的异常,从而导致测试失败?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:05 26 4
gpt4 key购买 nike

当我进行 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 捕获的异常会导致调试器停止。

这是我的 Intellij 设置: Intellij breakpoint settings

当您使用像 Tomcat 这样的应用程序服务器时,您可能会遇到类似的问题,它会捕获异常。同样,您可以按 Tomcat 包过滤 catch 类。

关于java - Intellij-IDEA 是否可以配置为中断 JUnit 测试中的异常,从而导致测试失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44028088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com