抑制来自测试存根实现的静态分析中的空取消引用警告

Suppressing a null dereference warning in static analysis coming from stub implementations in tests

我遇到了 Coverity Scan 的误报结果模式。我有一个接口 I 和两个实现,IImplFakeI

interface I {
  String f();
}

class IImpl {
  String f() {
    return "f";
  }
}

class FakeI {
  String f() {
    return null;
  }
}

鉴于此代码,如果我执行以下操作

I i;
i.f().equals(other);

我收到一个 null 取消引用警告,因为 i.f() 的结果可能是 FakeI 的那个 null。 FakeI 是在测试代码中实现的,所以我的生产代码甚至看不到它。但 Coverity 并不知道这一点。

有哪些可能的解决方案?我想要么从分析中完全删除测试代码,要么重新检查我的假代码并确保它们不 return 为空。是否有一些 Coverity 功能可以帮助处理这个问题?

静态分析器通常不会从将测试代码包含到分析中获益。这与动态分析形成对比,在动态分析中,测试起着至关重要的作用。它们是正在执行的内容,因此可以进行分析。由于测试代表 API 的简化(更短、独立)使用,因此分析测试生成的报告比分析实际 运行 二进制文件更容易。

在静态分析中包含测试代码有一些好处。

  1. 测试中可能存在错误,分析器可以帮助查找和解决。

不过也有缺点。特别是我在这里问的问题。

我现在正试图从分析范围中删除测试,这实际上似乎是 Coverity Scan 文档所建议的。他们的 Maven 构建命令是 mvn compile.