java如何模拟日历。使用JMockit的getInstance方法?
我正在尝试使用JMockit模拟Calendar.getInstance()
方法。这是我第一次嘲笑任何东西
下面是我的方法,它以YYYYMMDD
的格式给出最近Monday
或最近Thursday
的日期
今天是星期天,所以它应该以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
方法,以便轻松地使用junit 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;
}
}
# 1 楼答案
你可以增强做事的逻辑
# 2 楼答案
下面是
getCorrectDate()
方法的完整测试类(减去导入),使用JMockit 1.6中提供的两个模拟API:我想说这两个测试都非常简单,不需要更改原始的生产代码