有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    SonarQube告诉你,你的代码中有一个bug。如果在java spec中定义明确,则equals的合同:

    For any non-null reference value x, x.equals(null) should return false.

    如果你在超控中做得不一样,那就是你做错了