unit-testing - Grails-操作方法-使用 Controller 参数的单元测试服务

标签 unit-testing groovy grails

我正在尝试对 Controller 的日期和参数 LinkedHashMap作为参数的服务方法进行单元测试。设置如下:

def save = {CustomCommandObject erc ->
...
    if (erc.conditionProperty != null) {
        def result = myService.ServiceMethod(someDate, params)
    ...
    }
    ....
    redirect(controller: 'controllerName', action: 'actionName', id: params.id)
}

class MyService {
    static transactional = false
    ....
    def TypeToReturn ServiceMethod(Date someDate, def params){
    ...
        TypeToReturn typeToReturn = new TypeToReturn(params)
        return typeToReturn
    }
    ....
}

GSP View 上的标签之一是 类型的:

并且 TypeToReturn 具有一个属性:
LocalTime propertyName

当应用程序在浏览器中正常运行时,参数映射将正确传递给服务方法,并且新的TypeToReturn(params)创建的实例TypeToReturn
参数包含以下内容:
{java.util.LinkedHashMap$Entry@xxxxx} propertyName_hour -> 20
{java.util.LinkedHashMap$Entry@xxxxx} propertyName_minute -> 30
{java.util.LinkedHashMap$Entry@xxxxx} propertyName -> struct

因此,在对服务方法的测试中,我具有以下几点:
void testSomething() {
    LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
    params.put("propertyName","struct")
    params.put("propertyName_hour", "20")
    params.put("propertyName_minutes", "30")
    myService = new MyService()
    Date d = new Date()
    myService.ServiceMethod(d,params)
}

但是,当我尝试运行测试时,出现以下错误:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: 
Cannot cast object 'struct' with class 'java.lang.String' to class
'org.joda.time.LocalTime'

如果我完全从 map 上省略了 params.put(“propertyName”,“struct”),则再次(正确)错误提示TypeToReturn没有属性propertyName_hour

因此,我应该如何对使用 Controller 中的params Map的服务方法进行单元测试?仅在测试中重新创建 map 似乎不起作用。应该以特殊方式对参数Map进行模拟/插入吗?

谢谢

最佳答案

您是以单元测试还是集成测试的形式运行?如果尚不存在,请尝试将其移至测试/集成并使用

grails test-app integration:

它将在Grails环境中运行测试,并为joda-time插件提供机会,使其可以执行任何元编程魔术,以创建看上去像您所缺少的类型转换为DateTime的功能。

关于unit-testing - Grails-操作方法-使用 Controller 参数的单元测试服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927381/

相关文章:

java - Grails 编译错误 : unable to resolve class JSON

java - 为什么即使在更新了 Grails 中的 Selenium 依赖项后,我的 Geb 测试仍会返回 "failed to create driver from callback"?

swift - Quick-Nimble 框架中是否有等效的 XCTFail()?

java - 发送 JMS 消息的单元测试代码

java - 为什么我的删除测试方法找不到 id 7 的用户?

grails - 异步发送电子邮件

grails - 如何将 GSP 呈现为字符串?

groovy - 可以在groovy中获得闭包的调用者对象吗?

php - 如何在 PHP 中为单元测试伪造资源?

grails - Grails HasMany列表关系到具有BelongsTo关系的扩展类