【问题标题】:Verify that exception was caught with Mockito and PowerMock验证是否使用 Mockito 和 PowerMock 捕获了异常
【发布时间】:2013-07-07 04:32:04
【问题描述】:

有什么方法可以验证是否捕获了异常?我的意思是,在我的方法中,有一种情况我应该捕获异常,而在测试中我想验证是否真的捕获了异常。

【问题讨论】:

  • 我给出了答案,但如果您发布您正在测试的方法,我可以为您提供更准确的答案。

标签: java junit mockito powermock


【解决方案1】:

我认为答案是否定的——也许你可以通过一些激烈的反思争吵来解决这个问题,但如果是这样,我认为这不值得你花时间。

但我认为(没有看到您的方法),您可能仍然可以全面了解您的方法:

  • 如果您的方法在捕获异常后采取任何行动,断言 或验证这些操作是否发生。

  • 如果在捕获异常后没有任何动作发生,断言或验证 任何本应发生但被 异常,没有发生。

  • 最后,(再次,没有看到你的方法我不知道到底是什么 你正在处理)如果你的方法是无效的,并且没有任何反应 捕获异常后,最后一行逻辑是什么 抛出异常,然后考虑让你的方法返回一个 布尔值,如果捕获到异常则返回 false 和 true 否则。然后在您的测试中,制作一个应该导致 要抛出和捕获的异常,并测试方法是否返回 假的。

【讨论】:

  • 优秀的答案。首先,如果您捕获异常并简单地记录它,而不重新抛出,您可以将该记录 stmt 放在另一个自定义记录器方法中,并使用 Mockito 验证自定义记录器方法是否被调用:stackoverflow.com/a/4917929/3965524
【解决方案2】:

没有任何例子很难给出任何建议。但是如果异常没有被捕获,它会一直上升直到它到达测试并且测试会失败,因为抛出了一个异常。我知道这并不能验证它是否被捕获在特定的块中,而只是它被完全捕获。

【讨论】:

    【解决方案3】:

    如果没有被捕获,该异常在您的程序中会做什么? 如果它导致程序崩溃, 您可以在 try {} 块中运行测试的 Act 部分。 如果它引发异常,您可以捕获它并通过测试。

    另一种选择,如果 cacught 异常导致方法被调用, 说 printToLog() 您可以验证该方法确实是使用正确的参数调用的(使用 mockito)。

    【讨论】:

      【解决方案4】:

      您应该能够模拟要引发异常的元素,以便它确实引发异常,然后检查是否没有调用在未发生异常时将调用的其他方法。

      当抛出异常时,还要检查状态是否符合预期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-16
        • 2020-01-01
        • 2013-02-05
        • 2015-10-17
        • 2010-10-30
        • 2016-01-21
        相关资源
        最近更新 更多