【问题标题】:How to write a test case for an equals method如何为equals方法编写测试用例
【发布时间】:2023-03-08 00:05:02
【问题描述】:

我将如何为这个 equals 方法编写一个测试用例,在它检查对象是“整数”还是“Patron”之后比较 ID 号。

方法如下:

public boolean equals(Object other) {
   
      boolean bool = false;
      
      if (other instanceof Patron) {
         Patron patron = (Patron) other;
         bool = this.idNumber == patron.idNumber;
      } else if (other instanceof Integer) {
         Integer id = (Integer) other;
         bool = this.idNumber == id;
      }
      return bool;

【问题讨论】:

  • 您将创建该类的各种实例,然后根据您期望的值断言obj1.equals(obj2) 是真还是假。请注意,您对Integer 的处理违反了equals 的关联性契约,因为patron.equals(integer) 并不总是等于integer.equals(patron)
  • 一般来说,不同类别的东西不应该被认为是平等的。
  • 像其他方法一样编写测试。使用某个值调用被测方法,并将返回的值与您期望的值进行比较。 equals 与这里的任何其他方法没有什么不同。

标签: java oop junit equals testcase


【解决方案1】:

如果要验证equalshashCode方法的约定是否满足,我建议使用EqualsVerifier

如果您不想使用外部库,我建议您查看一下以了解您需要测试什么(以及为什么)。这是了解equalshashCode 的绝佳来源。

写一个测试很简单:

EqualsVerifier.forClass(Foo.class).verify();

还有一个不太严格的替代方案:

EqualsVerifier.simple()
            .forClass(Foo.class).verify();

它还有几个选项可以抑制其他警告。

【讨论】:

    猜你喜欢
    • 2023-02-17
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多