如何在做 junit 时模拟某种方法



下面是我的方法,它以YYYYMMDD的格式为我提供了最近Monday或最近Thursday的日期。

今天是星期六,所以它应该以YYYYMMDD的格式返回星期四的日期,所以它将是 - 2014027

public static String getDate() {
    Calendar cal = Calendar.getInstance();
    try {
        int dow = cal.get(Calendar.DAY_OF_WEEK);
        switch (dow) {
        case Calendar.THURSDAY:
        case Calendar.FRIDAY:
        case Calendar.SATURDAY:
        case Calendar.SUNDAY:
        while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.THURSDAY) {
            cal.add(Calendar.DATE, -1);
        }
        break;
        case Calendar.MONDAY:
        case Calendar.TUESDAY:
        case Calendar.WEDNESDAY:
        while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
            cal.add(Calendar.DATE, -1);
        }
        break;
        }
    } catch (Exception ex) {
        // log error
    }
    return toDateFormat.format(cal.getTime());
}

所以我的问题是,我如何模拟Calendar getInstance方法,以便我可以轻松地getDate方法?我以前从未嘲笑过它,所以我遇到了一些问题?

如果可能的话,任何人都可以在我的示例中提供一个简单的示例吗?

如果这是我的代码,我会将 Calendar 变量提取到另一个方法中,重载该方法,以便有一个版本将日历作为参数,还有一个版本没有参数,如下所示:

public static String getDate() {
    return getDate(Calendar.getInstance());
}
public static String getDate(Calendar cal} {
// your example code
}

通过这种方式,您可以在 getDate 中编写执行逻辑的测试,而无需使用任何模拟。如果你真的想覆盖该方法的无参数版本,那么你可以使用PowerMock来模拟日历的getInstance方法(这里有一个带有示例的问题)。

相关内容

  • 没有找到相关文章

最新更新