【问题标题】:How to cover equals method in code coverage如何在代码覆盖中覆盖equals方法
【发布时间】:2018-10-20 00:12:46
【问题描述】:

刚接触代码覆盖率,想了解一些见解...

     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 代码覆盖率中涵盖这一点。

【问题讨论】:

  • 我不明白你的问题。请详细说明。
  • 我真的很抱歉造成混乱,我正试图在代码覆盖范围内覆盖这段代码,并了解如何做到这一点?我正在尝试编写一个覆盖此代码的测试用例。
  • 从技术上讲,您需要 7 种测试方法来测试您的 equals(),并使用不同类型的参数来涵盖所有 ifs
  • @Ivan 我写的最多,但我在写最后 3 个名字、电子邮件和年龄时遇到问题。你能帮忙吗?
  • 1.比较两个不同名字的人。 2. 比较姓名相同但邮件不同的人。 3. 比较姓名和邮件相同但年龄不同的人。 4. 比较具有相同领域的人

标签: java junit code-coverage


【解决方案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,并将其作为成员变量存储在测试类中。

【讨论】:

    【解决方案2】:

    equals 的覆盖率可能为 0%,因为您可能没有包含带有生成注释的 lombok.config 文件为 true。 设置,

    config.stopBubbling = true;

    lombok.addLombokGeneratedAnnotation = true

    在 lombok.config 文件中

    【讨论】:

      【解决方案3】:

      我不确定您尝试使用哪种方法。我从您的问题中了解到的是:您正在尝试覆盖该人的 equals 代码。

      所以为了覆盖它 1) 拥有当前对象的 name 属性,它被 this 引用为 null 2) 将当前对象的 name 属性设置为非 null 以覆盖代码的 equals 部分。

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

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

      【讨论】:

      • 您好,我已将整个方法添加到代码覆盖范围内,您能解释一下如何做到这一点吗?我对这一行感到困惑 final Person other = (Person) obj;
      猜你喜欢
      • 1970-01-01
      • 2014-05-27
      • 2011-02-02
      • 2020-01-30
      • 2011-04-17
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多