测试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() 方法,不幸的是,这在这种情况下令人困惑。
我已经覆盖了 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() 方法,不幸的是,这在这种情况下令人困惑。