我正在尝试使用grails.test.mixin在grails 2.2.2单元测试上模拟日历 .mock但我有以下错误: 此时不再需要调用'getInstance'。要求结束。 有谁知道这是否可以模拟日历?
测试类: @TestFor(FechaService) class FechaServiceTests {
void testGetMesesCrearMetrica() {
given:
def cal = Calendar.getInstance().set(Calendar.MONTH, 0)
def mockCalendar = mockFor(Calendar)
mockCalendar.demand.static.getInstance{-> cal}
mockCalendar.createMock()
when:
def meses = service.getMesesCrearMetrica()
...
}
}
服务方式: def getMesesCrearMetrica(){ def meses = [:]
for(def mes : Meses.values()){
if(mes.value -1 == Calendar.getInstance().get(Calendar.MONTH)) break
meses[mes.value] = mes.name()
}
return meses
}
答案 0 :(得分:0)
您可以更改测试方法的签名,以便接受Calendar
作为参数。
如果做不到这一点,我也会尝试使用metaClass
。
@ConfineMetaClassChanges(Calendar)
void testGetMesesCrearMetrica() {
given:
def cal = Calendar.getInstance()
cal.set(Calendar.MONTH, 0)
Calendar.metaClass.static.getInstance = { cal }
when:
def meses = service.getMesesCrearMetrica()
...
}