你可以解释一下为什么那些单元测试失败了吗? 代码似乎非常明显,甚至失败结果都显示相同。
java.lang.AssertionError: expected: java.util.Date<Sun Jan 07 17:06:05 CET 2018> but was: java.util.Date<Sun Jan 07 17:06:05 CET 2018>
Expected :java.util.Date<Sun Jan 07 17:06:05 CET 2018>
Actual :java.util.Date<Sun Jan 07 17:06:05 CET 2018>
控制台日志是:
@Override
public Date getFormatedDate(Date dateToBeFormated) {
dateToBeFormated = date.getDate();
dateToBeFormated = Calendar.getInstance().getTime();
return dateToBeFormated;
}
按预期getFormatedDate:
getSymbols
答案 0 :(得分:0)
您的getFormatedDate
功能应该更像这样:
public static String getFormatedDate(Date inDate) {
SimpleDateFormat format = new SimpleDateFormat("E MMM dd HH:mm:ss z Y", Locale.ENGLISH);
String dateString = format.format(inDate);
return dateString;
}
当给出这个答案的当前时间时,它返回&#34; Sun Jan 07 14:50:16 EST 2018&#34;,这似乎是你的断言期望的格式。
答案 1 :(得分:0)
instant.equals( Instant.now() ) // Capture the current moment with a resolution as fine as nanoseconds, and compare.
您对Calendar
的通话正在捕捉与通过的Date
相关的另一个时刻。两者都以毫秒的分辨率捕获当前时刻。因此,虽然它们都可能捕获相同的秒数,但小数秒可能不同,或者可能相同,具体取决于计算机的速度。您正在生成一个仅显示整秒的字符串,因此会屏蔽小数秒的任何差异。
你正在使用现在遗留的麻烦的旧日期时间类,取而代之的是现代java.time类。
以UTC为Instant
捕获当前时刻,分辨率为纳秒,具体取决于硬件时钟的功能,在Java 9及更高版本中。特别是在Java 8中,当前时刻的捕获时间仅为毫秒,而{9}中较早的实现已在Java 9中被替换。
Clock
直接比较对象,而不是字符串。
Instant instant = Instant.now() ;
要生成用于向人类显示的字符串,请为标准ISO 8601格式的文本调用boolean isEqual = instant.equals( Instant.now() ) ; // Likely FALSE.
,并根据需要使用小数部分中的多位数来显示当前值。所以没有隐藏的数据。
toString
2018-01-23T01:23:45.123456Z
答案 2 :(得分:-1)
在您的代码中,您正在不同时刻实例化两个Date对象,因此它们应该是不同的。可能它们具有不同的毫秒数,在格式化日期时可能看不到。要声明您的方法返回今天的日期值,您可能需要按字段检查字段,断言年,月,日,小时,分钟和秒。