当前位置: 首页 > 知识库问答 >
问题:

Intellij IDEA是否可以配置为在JUnit测试中出现异常时中断,从而导致测试失败?

云英才
2023-03-14

当我进行JUnit测试时,我希望调试器在测试代码中引发任何异常导致测试失败时立即停止,以便检查出了什么问题。有没有可能配置IntelliJ的调试器来实现这一点,而不中断其他异常?

如果我在任何未捕获的异常上设置一个异常断点,这将不起作用,因为异常是由JUnit捕获的。如果我试图用catch类org在捕获的异常上也中断断点。朱尼特。,这也行不通,因为异常在到达JUnit之前就被Javas反射机制捕获和包装。所以我在这里有点不知所措-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在抛出算术异常的地方执行test时停止,这样我就可以检查导致异常的I的值。然而,我不希望IntelliJ在neverBreakHereSinceThisIsCaught中停止,因为在那里抛出的异常不会到达JUnit。我尝试了失败:-在捕获的异常上的异常断点也在neverBreakHereSinceThisIsCaught和其他地方的负载中中断。-由于JUnit捕获并包装了这些异常,因此仅在未捕获的异常上的异常断点永远不会命中catch类过滤器。junit。*`在JUnit的许多内部位置也中断了JUnit对Java反射的调用。

共有3个答案

张银龙
2023-03-14

我如何处理这个:

  1. 将Java异常断点设置为Java。lang.AssertionError

调试失败的测试,它将在断言内部中断。Java语言

查看调试器并导航到您要调试的测试,如下所示:

您现在可以在测试中检查变量、计算表达式等

陆光济
2023-03-14

您可以添加一个过滤器来检查堆栈跟踪是否包含您的包。它可能会使执行变慢,但对于无论如何都不会阻止测试执行的JUnit初始化异常,它不会停止,并且仅当调用涉及一些类时才会停止。大致如下:

龙玄天
2023-03-14

这就是我所做的:

基本上,您要做的是告诉Intellij在任何异常(捕捉到)时停止

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

 类似资料:
  • 我已经为Jenkins项目的集成公司建立了一个PoC,当Git存储库中有一个检查时,该PoC将构建并执行测试。当测试完成后,Jenkins将更新在Xray for JIRA中管理的测试。 测试是用cucumber写的。我曾徒劳地试图导致一个单一的测试产生一个失败,只是为了能够将它添加到我将要给高层管理人员的演示中。 以下是我的文件helloworld.feature的内容: 我知道不知道小cucu

  • 问题内容: 我正在使用 Junit 通过 Seleniun WebDriver 运行测试。我试图将测试分成功能区域,以更好地报告错误。我创建了测试以测试页面加载/将文档移动到其他工作流程。如果页面加载测试失败,或者工作流移动失败,我想跳过后续的页面/工作流测试。 如果测试A失败,如何跳过班级中的其余测试或在班级B中运行测试? 注意: 我意识到我要问的是“ UNIT TESTS的 不良实践* 。但是

  • 我找到了关于如何从Java中启动JUnit 4测试用例的说明,但是还没有找到在JUnit 5测试用例上启动测试的结构。 我尝试的JUnit 4解决方案是这样的:如何从我的java应用程序内部运行JUnit测试? 我一直在尝试让JUnit5中的控制台启动器工作,但它会引发异常。这记录在这里:http://junit.org/junit5/docs/current/user-guide/#runnin

  • 问题内容: 我真的是java的新手。 我正在构造函数上运行一些JUnit测试。构造函数是这样的:如果为其参数之一赋予null或空字符串,则应该抛出异常。 当我在JUnit中使用null或空字符串参数测试此构造函数时,即使我几乎100%确信将此类参数传递给它时,构造函数方法确实会引发异常,我也会看到一条红色的条。 如果该方法以预期的方式引发异常,则JUnit中是否应该没有绿色的条形?还是当异常抛出按

  • 问题内容: 编辑:目前没有JUnit 4。 嗨,您好, 我对使用JUnit进行“智能”异常测试有疑问。目前,我这样做是这样的: 如您所见,对于每个应该引发异常的函数,我都需要一个try / catch块。似乎不是执行此操作的好方法-还是没有可能减少try / catch的使用? 问题答案: 我建议您需要分解为多个单独的测试。各个try / catch块似乎彼此非常独立。您可能还希望将通用初始化逻辑

  • 我这里少了点什么。我做错什么了吗?