Grails2.4命令对象可空约束和依赖注入

Grails2.4命令对象可空约束和依赖注入,grails,grails-2.4,Grails,Grails 2.4,我们正在为Grails2.4升级做准备。我们面临的问题之一是 大多数命令对象单元测试由于注入的属性而失败,如 验证期间,服务必须不为null 是否有任何建议的方法来测试这一点?尽管测试不需要某些属性,但我们是否应该模拟所有属性?或者有没有不同的方法 Jeff回答了我的问题后,我与大家分享了更多关于新功能的链接: doWithSpring和doWithConfig将在2.4中的新增内容:单元测试改进部分中简要介绍 示例中还有一个JIRA问题:大多数单元测试不希望或不需要应用程序上下文全部启动和填充

我们正在为Grails2.4升级做准备。我们面临的问题之一是 大多数命令对象单元测试由于注入的属性而失败,如 验证期间,服务必须不为null

是否有任何建议的方法来测试这一点?尽管测试不需要某些属性,但我们是否应该模拟所有属性?或者有没有不同的方法

Jeff回答了我的问题后,我与大家分享了更多关于新功能的链接: doWithSpring和doWithConfig将在2.4中的新增内容:单元测试改进部分中简要介绍
示例中还有一个JIRA问题:

大多数单元测试不希望或不需要应用程序上下文全部启动和填充。单元测试可以向应用程序上下文添加任何他们想要的内容(或者什么都不添加)。在Grails的最新版本中,您可以执行以下操作

控制器和命令对象:

// grails-app/controllers/demo/DemoController.groovy
package demo

class DemoController {

    def processName(SomeCommand co) {
        render co.someValue
    }
}

class SomeCommand {
    String name
    def helperService

    def getSomeValue() {
        helperService.processValue(name)
    }
}
服务:

// grails-app/services/demo/HelperService
package demo

class HelperService {

    def processValue(String originalValue) {
        "__${originalValue}__"
    }
}
单元测试:

// grails-app/test/unit/demo/DemoControllerSpec.groovy
package demo

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(DemoController)
class DemoControllerSpec extends Specification {

    def doWithSpring = {
        helperService HelperService
    }

    void 'process name'() {
        when:
        params.name = 'Jeff'
        controller.processName()

        then:
        response.contentAsString == '__Jeff__'
    }
}
Grails2.4.2将通过该测试


我希望这会有所帮助。

当然,如果单元测试想要在上下文中添加一个假的
helperService
,那就好了。您可以执行类似于
helperService MyFakeHelperService
的操作,而不是
doWithSpring
块中的
helperService helperService
。谢谢Jeff
doWithSpring
回答了我的问题。我本可以描述doWithSpring,但我认为一个简单但完整的例子通常是最好的展示方式。很高兴你们都准备好了。@danielad:请不要像这样添加代码跨度(
)来强调。有关更多信息,请参阅。