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

时间:2014-03-02 01:21:20

标签: java unit-testing junit mockito powermock

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

今天是星期六,因此它应该以{{1​​}}的格式返回星期四的日期,因此它将是 - 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方法?我以前从未嘲笑它,所以我面临一些问题?

在我的例子中,任何人都可以提供一个简单的例子吗?

1 个答案:

答案 0 :(得分:2)

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

public static String getDate() {
    return getDate(Calendar.getInstance());
}

public static String getDate(Calendar cal} {
// your example code
}

通过这种方式,您可以编写测试,在getDate中运行您的逻辑,而无需使用任何模拟。 如果你真的想要覆盖方法的no-args版本,那么你可以使用PowerMock来模拟Calendar的getInstance方法(here's a question with examples of that)。