【问题标题】:Grails Test mockFor java.util.Calendar.getInstance()Grails 测试 mockFor java.util.Calendar.getInstance()
【发布时间】:2018-10-29 08:00:58
【问题描述】:

我正在尝试使用 grails.test.mixin 在 grails 2.2.2 单元测试中模拟日历 .mockFor 但我有以下错误: 此时不再需要调用“getInstance”。要求结束。 有谁知道这是否可以模拟日历?

测试类: @TestFor(FechaService) 类 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 getMesesCearMetrica(){ def meses = [:]

    for(def mes : Meses.values()){
        if(mes.value -1 == Calendar.getInstance().get(Calendar.MONTH)) break
        meses[mes.value] = mes.name()
    }
    return meses
}

【问题讨论】:

    标签: unit-testing grails calendar


    【解决方案1】:

    您可以更改被测方法的签名,使其接受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()
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-15
      • 2023-03-28
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多