DSF*_*DSF 3 java junit tostring junit4 primitive-types
我正在为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());
}
Run Code Online (Sandbox Code Playgroud)
Clock类中的toString():
@Override
public String toString() {
return "Time : " + hours + ":" + minutes + ":" + seconds;
}
Run Code Online (Sandbox Code Playgroud)
和Clock类中的setTime方法:
public void setTime(byte hour, byte minutes, byte seconds) {
this.hours = hour;
this.minutes = minutes;
this.seconds = seconds;
}
Run Code Online (Sandbox Code Playgroud)
我想知道,也许它与使用字节有关?或者它是什么toString()返回我不明白的东西.我只是很困惑为什么我的JUnit方法不会将它们视为相同的格式.
这个:
<10:0[0:0]0 > but was:< Time : 10:0[:]0>
Run Code Online (Sandbox Code Playgroud)
表明了差异.即输出为10:0:0而不是10:00:00.鉴于您的代码执行此操作,这并不奇怪:
return "Time : " + hours + ":" + minutes + ":" + seconds;
Run Code Online (Sandbox Code Playgroud)
并且分钟/秒不是零填充.或许检查出String.format()有%02d格式设置.我不明白(也)你为什么要使用byte作为值.这int将是一个更常见的类型.