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

在方法完成时故意使JUnit测试失败

澹台俊达
2023-03-14

我正在使用一个Selenium/JUnit测试环境,我想实现一个类来执行“软断言”:这意味着我想让它记录断言是否通过,但在明确地告诉它验证断言之前,测试用例不会失败。这样,我可以检查页面上的多个字段,记录所有不匹配的字段。

我的“Verify”方法如下所示(AssertTrue/AssertFalse也存在类似的方法):

public static void verifyEquals(Object expected, Object actual) {
    try {
        assertEquals(expected, actual);
    } catch (Throwable e) {
        verificationFailuresList.add(e);
    }
}

一旦验证了所有字段,我就调用以下方法:

public static void checkAllPassed() {
    if (!verificationFailuresList.isEmpty()) {
        for (Throwable failureThrowable : verificationFailuresList) {
            log.error("Verification failure:" + failureThrowable.getMessage(), failureThrowable);
            // assertTrue(false);
        }
    }
}

目前,我只是使用asserttrue(false)来快速使测试用例失败;然而,这会使日志变得杂乱无章,导致一个无谓的故障,并将真正的问题推得更高。有没有更干净的方法来有目的地使JUnit测试用例失败?如果没有,是否有更好的解决方案来实现软断言?我知道有一篇文章有一个很好的实现,但据我所知,JUnit没有与IInvokedMethodListener类等价物

共有2个答案

梁丘俊材
2023-03-14

您可以使用JUnit的ErrorCollector规则。

崔宜修
2023-03-14

如果您想要故意使JUnit测试失败,那么您应该使用org.JUnit.assert.fail()

另一种选择是切换到TestNG框架,该框架的最新版本中已经有一个softassert类。

 类似资料:
  • 我有一个测试方法,看起来像: 并行工作使用可关闭的资源来控制生命周期,该资源在方法中关闭: 问题是:方法是在完成工作之前和等待超时到期之前调用的。 怎么可能?那我该怎么解决呢?

  • 问题内容: JUnit中是否有一种方法可以在带注释的@After方法中检测测试用例是否存在测试失败或错误? 一个 丑陋的 解决方案是这样的: 这很丑陋,因为需要注意测试代码中的“基础结构”(withoutFailure标志)。 我希望可以通过@After方法获得测试状态!? 问题答案: 如果您有幸使用JUnit 4.9或更高版本,将完全按照您的要求进行。 分享并享受!

  • 问题内容: 我有一个充满void方法的Java类,我想进行一些单元测试以获得最大的代码覆盖率。 例如我有这种方法: 它的名字不好用是因为我翻译了代码以更好地理解。每种方法均会验证参数是否在某种程度上有效并且编写正确。 范例: 我的单元测试很好地涵盖了小的方法,因为我要求它们检查ErrorFile是否包含错误消息,但是我看不到如何测试方法checkIfValidElements,它什么也不返回或什么

  • 问题内容: 我在下面的方法中编写测试用例时遇到问题: 这是我编写的测试用例,但我认为此测试用例中存在继承问题或逻辑问题。应该是一个非常简单的示例,但无法弄清楚。这是我写的代码: 问题答案: 两件事情 : 您正在静态调用非静态方法。该方法应声明为静态: public static boolean evenNum(double num){ } 您没有正确输入方法的名称。仔细看。还考虑将其重命名为更易读

  • 我有一个名为dealDeck()的公共静态void方法,该方法从名为deck的ArrayList中获取对象,并根据它们在列表中的位置将它们分离并放置到4个不同的ArrayList中。是否有JUnit测试来检查方法是否按计划运行? 是否可以或应该测试此方法?