使用PowerMock进行单元测试,比较秒数时出现精度问题

问题描述

我正在尝试使用powermock对时间函数进行单元测试,但是在将当前时间与系统时钟进行比较时,有时无法通过assertEquals()。预计时间为2秒。这是我的代码供参考:

@RunWith(PowerMock Runner.class)
@PrepareForTest({Calendar.class,time.class})
public class TEST {

    @Test
    public void testTime() {
        powermockito.mockStatic(Calendar.class);
        Mockito.when(Calendar.getInstance()).thenReturn(calendarInstance);
        SimpleDateFormat sdf = new SimpleDateFormat(DD_DOT_MM_DOT_YYY);
        assertEquals(sdf.format(calendarInstance.getTime()),time.getDate(DD_DOT_MM_DOT_YYYY)); }
    }
    
//inside the time.getDate function
    
public static String getDate(String format) {
    DateFormat dateFormat = new SimpleDateFormat(format);
    Date date = new Date();
    return dateFormat.format(date);
}

这是我有时得到的Junit输出,它指示失败:

org.junit.ComparisonFailure:
Expected :20:43:18
Actual :20:43:20

我已经尝试了几种方法解决此问题,但是我无法使其可靠地工作。谢谢您的提前帮助。

解决方法

该代码示例未显示如何初始化time中的time.getDate对象。

对于此测试-您应使用相同的种子值初始化timeCalendar.getInstance(),否则结果将不可预测。