日期检查的基本JUnit

Bis*_*128 5 java junit date

我想尝试为以下代码编写Junit;

/**
 * Check if a date is greater than 24 hours
 * @param dateToCheck the date to check
 * @return true if it is greater than otherwise false
 */
public static boolean dateGreaterThan24Hours(Date dateToCheck){
    if(dateToCheck == null){
        throw new IllegalArgumentException("The date passed to check for greater than 24 hours is null");
    }
    long millisIn24Hours = 1000 * 60 * 60 * 24;
    Date hours24ago = new Date(new Date().getTime() - millisIn24Hours);
    if (dateToCheck.before(hours24ago)) {
        //24 hrs have passed
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

但是我很难这样做,因为该方法只接受一个日期来检查.意味着当前对测试方法的尝试显然会失败;

@Test
public void checkLessThan24HoursShouldReturnTrue(){
    //Calendar represents the 7th of July 2014 at 17.30pm
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 2014);
    cal.set(Calendar.MONTH, 07);
    cal.set(Calendar.DAY_OF_MONTH, 7);
    cal.set(Calendar.HOUR_OF_DAY,17);
    cal.set(Calendar.MINUTE,30);
    cal.set(Calendar.SECOND,0);
    cal.set(Calendar.MILLISECOND,0);

    Date july7 = cal.getTime();

    //Calendar represents the 6th of July 2014 at 18.30pm
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 2014);
    cal.set(Calendar.MONTH, 07);
    cal.set(Calendar.DAY_OF_MONTH, 6);
    cal.set(Calendar.HOUR_OF_DAY,18);
    cal.set(Calendar.MINUTE,30);
    cal.set(Calendar.SECOND,0);
    cal.set(Calendar.MILLISECOND,0);

    Date july6 = cal.getTime();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我如何重构原始方法,使其更容易测试?

谢谢

Kep*_*pil 5

您不必更改原始方法.最简单的测试方法是:

@Test
public void checkMoreThan24HoursShouldReturnTrue() {
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.HOUR_OF_DAY, -25);
    assertTrue(YourClass.dateGreaterThan24Hours(cal.getTime()));
}

@Test
public void checkLessThan24HoursShouldReturnFalse() {
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.HOUR_OF_DAY, -23);
    assertFalse(YourClass.dateGreaterThan24Hours(cal.getTime()));
}
Run Code Online (Sandbox Code Playgroud)

另外,我会在评论中推荐@DaveNewton建议的一些重构,以及验证null参数的自定义异常的测试.

  • @ A4L不"添加"根据需要修改其他字段,例如,如果在API文档示例中减去5天,并且您在该月的第一天,您将移至上个月? (2认同)