抑制来自测试存根实现的静态分析中的空取消引用警告
Suppressing a null dereference warning in static analysis coming from stub implementations in tests
我遇到了 Coverity Scan 的误报结果模式。我有一个接口 I
和两个实现,IImpl
和 FakeI
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 的简化(更短、独立)使用,因此分析测试生成的报告比分析实际 运行 二进制文件更容易。
在静态分析中包含测试代码有一些好处。
- 测试中可能存在错误,分析器可以帮助查找和解决。
不过也有缺点。特别是我在这里问的问题。
我现在正试图从分析范围中删除测试,这实际上似乎是 Coverity Scan 文档所建议的。他们的 Maven 构建命令是 mvn compile
.
我遇到了 Coverity Scan 的误报结果模式。我有一个接口 I
和两个实现,IImpl
和 FakeI
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 的简化(更短、独立)使用,因此分析测试生成的报告比分析实际 运行 二进制文件更容易。
在静态分析中包含测试代码有一些好处。
- 测试中可能存在错误,分析器可以帮助查找和解决。
不过也有缺点。特别是我在这里问的问题。
我现在正试图从分析范围中删除测试,这实际上似乎是 Coverity Scan 文档所建议的。他们的 Maven 构建命令是 mvn compile
.