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

标签 java intellij-idea junit

当我进行 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/

相关文章:

java - file.separator Java 7 选项导致 ExceptionInInitializerError

java - OpenStack Swift 分段上传 jclouds

java - 无法捕获算术异常(不过捕获 IllegalArgumentException 没问题)

java - 使用 Mockito 模拟 HttpURLConnection 的问题

java - 在不同的 Maven 模块中测试多个实现?

java - 如何在文件中保存更改后自动重启 Dropwizard 应用程序

java - .replyToQueueManagerName 和 replyToQueueName 在不同的 MqEnvironment 上

java - 智能 : search and replace 'var' declarations with actual types

macos - 如何清除IntelliJ项目索引?

reactjs - WebStorm 上的 %PUBLIC_URL% 编辑器警告