2

我正在使用 Grails 2.2.0。这是我要测试的方法:

def extendedSearchIndex () {
    log.debug("ExtendedSearchIndex ... ");
    def deviceClass = deviceService.getDeviceClass(request)
    if (deviceClass == "FeaturePhone") {
    render(view: '/featurephone/expanded_search')
    }
}

这是我的测试方法:

void testExtendedSearchIndex01() {
    deviceServiceMock.demand.getDeviceClass(1..10) { def myRequest, boolean verbose ->
        return "FeaturePhone"
    }
    controller.deviceService = deviceServiceMock.createMock()
    controller.extendedSearchIndex()

    assert view == "/featurephone/expanded_search"
}

此测试失败,因为视图为空。但为什么它是空的?不应该/featurephone/expanded_search吗?我错过了什么吗?

谢谢你的帮助。

- 克里斯

4

1 回答 1

2

getDeviceClass()您模拟了需要 adef和 a的方法的签名boolean,但您的控制器使用了另一个只需要 a 的方法def。我认为你的模拟应该是:

deviceServiceMock.demand.getDeviceClass(1..10) { def myRequest ->
  return "FeaturePhone"
}

一个建议是对 deviceClass 使用字符串,因为您知道返回的类型getDeviceClass()

String deviceClass = deviceService.getDeviceClass(request)
if(deviceClass == "FeaturePhone")

如果你使用 IDE,例如 STS,你可以调试你的控制器来检查服务返回的值。

于 2013-03-12T12:33:31.183 回答