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

标签 java unit-testing junit 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
        }
    }
 }

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

我想让它在运行 catch 子句指令时测试失败。

我确实想到了一些我可以尝试和编写测试的方法,以便我获得等效的功能,但是每种方法都有我不想那样做的原因。如果达到任何 catch 子句,似乎尝试使测试失败是最干净的方法,如果这实际上可能的话

注意事项:

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

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


编辑:

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

最佳答案

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

关于java - 有没有办法验证在使用 JUnit 时是否在测试方法中调用了 try/catch 指令的 Catch 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30620397/

相关文章:

java - 没有来自 JSON 的值

c# - 使用最小起订量模拟代表 "Wrapper"

unit-testing - Cognos 上的自动化单元测试是否可行?

c# - 单元测试 MVC 3 和 Entity Framework

java - Mockito 注解和方法调用的区别

android - 无法在 Android JUnit 项目上进行 Ant 运行测试

java - FTP客户端问题

java - 如何杀死不可中断的线程?

java - 将 dagger2 与 Retrofit 和 MVVM 结合使用

java - 如何对 Flink ProcessFunction 进行单元测试?