我正在尝试在我的一个单元测试中抑制FindBugs警告:
@SuppressFBWarnings(value = "DMI_DOH",
justification = "It's sensical when declaring expectations.")
@Test
public void ctor_checksForNullArguments() {
new Expectations(Preconditions.class) {
{
Preconditions.checkNotNull("DUMMY"); // D'oh! A nonsensical invocation…
this.result = "DUMMY";
Preconditions.checkNotNull("(dummy)"); // D'oh! A nonsensical invocation…
this.result = "(dummy)";
}
};
new InfixSymbolTest.DummySymbol();
}
我只能假设我这样做不正确,因为仍然通过Eclipse功能和Gradle插件报告警告。帮助
答案 0 :(得分:2)
以下代码创建匿名内部类:
new Expectations(Preconditions.class) {
// ...
};
对Preconditions.checkNotNull
的调用和this.result
的分配发生在匿名内部类中作用域的初始化程序块中。为了使@SuppressFBWarnings
注释适用于这些语句,注释必须至少放在包含它们的类上。
虽然匿名内部类及其语句的源代码是在ctor_checksForNullArguments
测试方法中物理编写的,但生成的字节码实际上并不是测试类的一部分,也不是方法,因此将注释放在方法上会将其应用到错误的范围。
由于任何匿名内部类都可以提取到命名(非匿名)内部类甚至是顶级类,因此这样做可以使@SuppressFBAnnotations
放在适当的范围内:整个class,或者可能是更受限制的范围,例如特定方法或构造函数(根据需要)。