2012-11-01 35 views
3

我正在爲Clock類編寫JUnit測試方法,以確保對象的toString表示形式以我希望的格式返回。因此,我重寫了toString()並將其寫入了它想要表示的內容,但是當我將其與JUnit中預期的格式進行比較時,它會失敗,如下所示:覆蓋toString()對象的表示形式返回意外符號

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());  

} 

的toString()在時鐘類:

@Override 
public String toString() { 
    return "Time : " + hours + ":" + minutes + ":" + seconds; 
} 

和時刻設定方法也Clock類:

public void setTime(byte hour, byte minutes, byte seconds) { 

    this.hours = hour; 
    this.minutes = minutes; 
    this.seconds = seconds; 

} 

我想知道,也許它與使用字節有關?或者它只是toString()返回的東西,我不明白。我只是爲什麼我的JUnit方法沒有看到它們是相同的格式而感到困惑。

+1

的[] simbols只是把爲斷言輸出(: – HericDenis

回答

1

由線替換:

return "Time : " + String.format("%02d", hours) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds); 
+0

完美工作。謝謝! – DSF

+0

@ user992055不客氣:) – Mik378

+2

爲什麼不''返回String.format(「時間:%02d:%02d:%02d」,小時,分鐘,秒)'? –

6

此:

<10:0[0:0]0 > but was:< Time : 10:0[:]0> 

正在指示的差。即輸出是10:0:0而不是10:00:00。並不奇怪,因爲你的代碼做到這一點:

return "Time : " + hours + ":" + minutes + ":" + seconds; 

和分鐘/ econds不是零填充。或許使用%02d格式設置檢出String.format()。我也不明白爲什麼你會使用字節作爲值。一個int將是一個更正常的類型在這裏使用。

+0

啊我看,我只是改變了EXPECTED_STRING到: final String EXPECTED_STRING =「Time:10:0:0」; 並且測試通過了,但我想填充零,所以我會按照你的建議檢查String.format()謝謝 – DSF

0

它指出你的方法返回10:0:0而不是10:00:00。數字類型不存儲前導零,所以你的DBL_ZERO常量不能以你想要的方式工作。

試試這個:

@Override 
public String toString() { 
    return "Time : " + hours + ":" 
     + (minutes < 10 ? "0" : "") + minutes + ":" 
     + (seconds < 10 ? "0" : "") + seconds; 
}