为什么我的单元测试失败,尽管方法效果很好?

时间:2018-03-10 12:13:53

标签: android unit-testing

我试着计算时间间隔。我将字符串日期解析为Date对象以获得某种模式。

public static float countTimeAgo(String timestamp){

    // date pattern
    SimpleDateFormat simpleDateFormat
            = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
    simpleDateFormat.setLenient(false);

    // time interval
    float diff;

    try {
        // convert timestamp to given pattern
        Date timestampDate = simpleDateFormat.parse(timestamp);

        // get actual date and convert to pattern
        Date date = new Date();
        simpleDateFormat.format(date);

        // count difference in millis
        diff = date.getTime() - timestampDate.getTime();

        // convert millis to minutes
        diff = diff/(1000*60);

    } catch (ParseException e) {
        return -1;
    }

    if (diff < 0)
        return -1;

    else
        return diff;
}

当我把字符串&#34; 2018-03-08 23:28:07.807353&#34;作为运行我的应用程序时的参数,方法返回非-1值。但是当我进行测试时,它失败了:

@Test
public void testCountTimeAgo(){

    String date = "2018-03-08 23:28:07.807353";
    assertTrue(PostTimeProvider.countTimeAgo(date) != -1);
}

的AssertionError:

java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)

有人知道为什么吗?

1 个答案:

答案 0 :(得分:0)

在您的代码中,当解析失败或日期是将来时,可以返回-1。在这种情况下,您应该检查哪一个正在发生。也许您的设备和运行单元测试的设备有不同的时间?