我正在尝试使用JMockit模拟Calendar.getInstance()
方法。这是我第一次模拟任何东西。
下面是我的方法,它会以YYYYMMDD
格式给出最近的星期一
或星期四
的日期。
今天是星期日,所以它应该返回YYYYMMDD
格式的星期四日期,因此它将是- 2014027
。
public static String getCorrectDate() {
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());
}
所以我的问题是如何使用JMokcit模拟
Calendar.getInstance
方法,以便我可以轻松地对getCorrectDate
方法进行单元测试? 我以前从未模拟过它,所以我遇到了一些问题?如果可以,请任何人提供一个简单的示例,让我更好地理解吗?
我正在尝试像这样做,但它在
MockClass
上抱怨,因为它无法解析..我已经添加了JMockit的maven依赖项。@MockClass(realClass = Calendar.class)
class CalendarMock {
private int hour;
private int day;
private int minute;
public CalendarMock(int day, int hour, int minute) {
this.hour = hour;
this.day = day;
this.minute = minute;
}
@Mock
public int get(int id) {
if (id == Calendar.HOUR_OF_DAY) {
return hour;
}
if (id == Calendar.DAY_OF_WEEK) {
return day;
}
if (id == Calendar.MINUTE) {
return minute;
}
return -1;
}
}