在测试equals()时解决SonarQube中的“null比较”错误

时间:2018-05-18 14:51:44

标签: java null sonarqube equals

SonarQube在我的质量代码报告中给我一个重大错误:

  

将此调用移至“等于”;与null的比较总是返回false;考虑使用'== null'来检查无效。

但是,这个equals调用是一个覆盖的调用,这意味着我想测试如果我的对象在equals()方法中实际为null会发生什么。

此问题有解决方法吗?我不应该测试我的对象的可空性,或者除了忽略这种情况之外别无选择吗?

编辑评论中提到的代码:

对象本身:

@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 个答案:

答案 0 :(得分:4)

SonarQube告诉您,您的代码中存在错误。 equals的合同,如果在java spec中明确定义:

  

对于任何非空引用值xx.equals(null)应返回false。

如果你在覆盖中采用不同的方式 - 你做错了。