测试toString时,为什么需要调用toString?

When testing toString, why is calling toString required?

我已经覆盖了 class 的 toString 方法。在测试 toString 方法时,我一直想知道为什么需要调用 toString。

让我详细说明 -

toString 在 class 人中:

@Override
public String toString() {
    return ("This Object is called " + this.name + ". For a list of weekdays: " + this.dates);
}

工作测试用例:

    @Test
    Human Tom = new Human("Tom"); // constructor creates an ArrayList<weekDay> named dates
    weekDay someDay = new weekDay("Thursday");
    Tom.addDate(someDay);  // adds someDay to the ArrayList
    String result = ("This Object is called " + this.name + ". For a list of weekdays: " + Tom.dates);
    assertEquals(Tom.toString(), result);

assertEquals(Tom.toString(), result) 可以正常工作。但是,当我尝试 assertEquals(Tom, result) 时,eclipse 会写出类似 "expected x" 的内容,但实际上是“y”。然而,“y”与“x”具有完全相同的内容。为什么需要显式调用 toString()

assertEquals(Tom.toString(), result);

这相当于写作:

Tom.toString().equals(result);

比较两个 String 值。当您尝试这样做时:

assertEquals(Tom, result);

这相当于:

Tom.equals(result);

现在正在调用 People class 上的 .equals() 方法(如果您定义了一个),如果您没有定义则调用 Object#equals。

Eclipse 在您的测试未能为您提供错误详细信息后打印出 toString() 方法,不幸的是,这在这种情况下令人困惑。