有没有办法验证在使用 JUnit 时是否在测试方法中调用了 try/catch 指令的 Catch 部分?

Seb*_*Seb 5 java junit unit-testing mockito

例如,如果我有以下要测试的类:

public class SomeClass{
    public void someMethod() {
        try {
            //Some code, where comething could go wrong
        } catch (Exception err) {
            //Handling it amounts to logging the problem and trying to continue
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

如果我随后使用 JUnit 测试此方法,那么如果 try 子句中出现问题并且运行 catch 代码,则测试将通过。

我想这样做,以便在运行 catch 子句指令时测试将失败。

我确实想到了一些可以尝试编写测试的方法,以便获得等效的功能,但是对于每种方法,我都不想以这种方式进行处理。如果达到任何 catch 子句,则尝试使测试失败似乎是最干净的方法,如果这实际上是可能的

笔记:

我知道我可以验证代码的某些功能并检查它们是否是某个值/是否已经使用 Mockito 运行了多次。但是,我想要一个解决方案,如果对测试方法进行了更改,从根本上改变了它的工作方式(但不是本质上正在执行的任务),那么我将不必重写测试。

不幸的是,为了使这个问题更加困难,我无法对源代码进行任何修改。这个位置不在我的控制范围内,所以我必须在这些范围内工作。


编辑:

SomeClass 是我希望测试的类。它不是实际的 JUnit 测试。我已经编辑了我的原始问题以尝试澄清这一点。

Bre*_*ker 4

我以前必须处理过此类问题。我最终模拟了日志记录子系统(不简单但也不过分复杂)并监听“有趣的”日志记录调用,然后在发生故障时标记故障。