java在测试equals()时解决SonarQube中的“空比较”错误
SonarQube在我的质量代码报告中给了我一个主要的错误:
Remove this call to "equals"; comparisons against null always return false; consider using '== null' to check for nullity.
然而,这个equals
调用是一个重写调用,这意味着我想测试一下,如果我的对象在equals()
方法中实际为空,会发生什么
这个问题有解决办法吗?我应该不测试对象的可空性,还是别无选择,只能忽略这个案例
编辑注释中要求的代码:
对象本身:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyTestedObject other = (MyTestedObject) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (type != other.type)
return false;
return true;
}
在测试中:
@Test
public void test() {
MyTestedObject testedObject = new MyTestedObject();
boolean nullValue = testedObject.equals(null);
Assert.assertFalse(nullValue);
}
# 1 楼答案
SonarQube告诉你,你的代码中有一个bug。如果在java spec中定义明确,则
equals
的合同:如果你在超控中做得不一样,那就是你做错了