3

我正在为 Clock 类编写 JUnit 测试方法,以确保对象的 toString 表示以我想要的格式返回。所以,我已经覆盖了 toString() 并按照它想要的方式编写它,但是当我将它与我期望在 JUnit 中的格式进行比较时,它会失败并显示以下内容:

org.junit.ComparisonFailure: 预期: <时间: 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());    

}

时钟类中的 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 方法不将它们视为相同的格式感到困惑。

4

3 回答 3

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 作为值。Anint将是在这里使用的更正常的类型。

于 2012-11-01T16:48:58.243 回答
1

换行:

return "Time : " + String.format("%02d", hours) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds);
于 2012-11-01T16:52:47.537 回答
0

它指出您的方法返回 10:0:0 而不是 10:00:00。数字类型不存储前导零,因此您的 DBL_ZERO 常量不会以您想要的方式工作。

试试这个:

@Override
public String toString() {
    return "Time : " + hours + ":"
        + (minutes < 10 ? "0" : "") + minutes + ":"
        + (seconds < 10 ? "0" : "") + seconds;
}
于 2012-11-01T16:51:58.650 回答