我正在为Clock类编写一个JUnit测试方法,以确保对象的toString表示以我想要的格式返回。所以,我已经覆盖了toString()并将其编写为希望它被表示,但是当我将它与我在JUnit中期望的格式进行比较时,它会失败并显示以下内容:
org.junit.ComparisonFailure:expected:<时间:10:0 [0:0] 0>但是:<时间:10:0 [:] 0>
为什么符号[和]会显示在这里?它是toString()表示的一部分,我不知道吗?相关代码如下:
JUnit的:
@Test
public void testFormattingOfTimeIsDisplayedCorrectly() {
final byte TEN = 10;
final byte DBL_ZERO = 00;
clock.setTime(TEN, DBL_ZERO, DBL_ZERO);
final String EXPECTED_STRING = "Time : 10:00:00";
assertEquals(EXPECTED_STRING, clock.toString());
}
Clock类中的toString():
@Override
public String toString() {
return "Time : " + hours + ":" + minutes + ":" + seconds;
}
和setTime方法也在Clock类中:
public void setTime(byte hour, byte minutes, byte seconds) {
this.hours = hour;
this.minutes = minutes;
this.seconds = seconds;
}
我想知道,也许它与使用字节有关?或者它是什么toString()返回我不明白的东西。我只是很困惑为什么我的JUnit方法不会将它们视为相同的格式。
答案 0 :(得分:6)
此:
<10:0[0:0]0 > but was:< Time : 10:0[:]0>
表示不同。即输出为10:0:0而不是10:00:00。鉴于您的代码执行此操作,这并不奇怪:
return "Time : " + hours + ":" + minutes + ":" + seconds;
并且分钟/秒不是零填充。也许可以使用String.format()
格式设置查看%02d
。我不明白(也)你为什么要使用byte作为值。 int
将是一种更常用的类型。
答案 1 :(得分:1)
替换为:
return "Time : " + String.format("%02d", hours) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds);
答案 2 :(得分:0)
它指出你的方法返回10:0:0而不是10:00:00。数字类型不存储前导零,因此您的DBL_ZERO常量不能以您希望的方式工作。
试试这个:
@Override
public String toString() {
return "Time : " + hours + ":"
+ (minutes < 10 ? "0" : "") + minutes + ":"
+ (seconds < 10 ? "0" : "") + seconds;
}