如何在代码覆盖率中覆盖equals方法

时间:2018-10-20 00:12:47

标签: java junit code-coverage

新的代码覆盖范围,希望获得一些见解...

     public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Person other = (Person) obj;
    if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
        return false;
    }
    if ((this.email == null) ? (other.email != null) : !this.email.equals(other.email)) {
        return false;
    }
    if (this.age != other.age && (this.age == null || !this.age.equals(other.age))) {
        return false;
    }
    return true;
}

我如何在jcoco代码覆盖率中对此进行介绍。

3 个答案:

答案 0 :(得分:1)

要对该类进行100%测试,您应该为每个if?:运算符创建一个测试。代码的每个部分都应进行测试。例如,第一个if (this == obj),您应该在哪里进行测试

@Test
public void testEqualsSameObj() {
    MyClass sut = new MyClass(); // sut == system under test
    assertTrue (sut.equals(sut));
}

现在进行下一个传递null的测试:

@Test
public void testEqualsNull() {
    MyClass sut = new MyClass(); // sut == system under test
    assertFalse (sut.equals(null));
}

并继续下一个条件,直到覆盖代码中的所有分支。

您可以从方法中获取sut并将其作为成员变量存储在测试类中。

答案 1 :(得分:0)

我不确定您要尝试使用哪种方法。我从您的问题中了解到的是:您试图掩盖人的平等代码。

所以为了覆盖那个 1)具有当前对象的名称属性,此属性称为null 2)将当前对象的name属性设置为非null,以覆盖代码的等号部分。

要了解更多信息,请学习三元(?:)运算符的工作原理。

我希望这个答案会有所帮助。

答案 2 :(得分:0)

等值项可能具有0%的覆盖率,因为您可能未包含带有生成的批注为true的lombok.config文件。 设置

config.stopBubbling = true;

lombok.addLombokGeneratedAnnotation = true

在lombok.config文件中