【问题标题】:Junit code coverage for catch block in try catchtry catch 中 catch 块的 Junit 代码覆盖率
【发布时间】:2021-05-02 10:03:50
【问题描述】:

我正在尝试为以下代码编写 JUnit,但我不知道如何覆盖 catch 块语句中编写的代码。请任何人都可以为下面的代码编写一个示例 JUnit 吗?

这里我不想涵盖任何异常,因为这个块从不抛出任何异常,但我想涵盖使用 Mockito 在 catch 块中编写的代码行。基本上,在这种情况下,catch 块是无法访问的。

public void someMethod(Activity activity) {
    try {
        Log.d("TAG", "Print: " + activity);
    } catch (Throwable e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow。请通过tour 了解 Stack Overflow 的工作原理,并阅读How to Ask 以了解如何提高问题的质量。然后edit你的问题包括你拥有的完整源代码作为minimal reproducible example,其他人可以编译和测试。请显示您尝试过的尝试以及您从尝试中得到的问题/错误消息。
  • 您认为activity 的什么值会导致对Log.d 的调用失败?
  • 如果 catch 块真的无法访问,为什么它会在那里,为什么要覆盖它,因为它永远不会被执行?此外,如果由于无法访问而无法运行,您希望如何覆盖它?

标签: java junit mockito code-coverage test-coverage


【解决方案1】:

没有 Mockito:

创建一个扩展 Activity 的新 Activity 类。在其 toString() 代码中,抛出异常。

class ExceptionActivity extends Activity {
    @Override
    public String toString() {
        throw new RuntimeException("mock exception");
    }
}

当你尝试打印一个活动对象时,你会得到一个异常。

使用 Mockito:

public void someMethod(Activity activity) {
    try {
        someService.doJob(activity);
    } catch (Throwable e) { 
        e.printStackTrace(); 
    }
}

您可以通过这种方式模拟异常:

when(someService.doJob(any())).thenThrow(new RuntimeException("mock exception"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2022-11-10
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多