Grails测试mockFor java.util.Calendar.getInstance()

时间:2018-05-18 20:22:32

标签: unit-testing grails calendar

我正在尝试使用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
}

1 个答案:

答案 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()
    ...
}