Grails 2.4 Command对象可以为空的约束和依赖注入

时间:2014-07-19 09:16:12

标签: grails grails-2.4

我们正在准备Grails 2.4升级。我们面临的一个问题是 由于注入属性,大多数命令对象单元测试都失败了 服务,在验证期间必须不为空。

有没有建议的方法来测试这个?我们是否应该模拟所有属性,尽管有些不需要进行测试?或者有没有办法以不同的方式做到这一点?

在Jeff回答我的问题之后,我与更多有关新功能的信息共享链接: doWithSpring和doWithConfig不久将在2.4中的新内容中进行描述:http://grails.org/doc/latest/guide/introduction.html#whatsNew24单元测试改进部分 还有一个JIRA问题,例如:https://jira.grails.org/browse/GRAILS-11003

1 个答案:

答案 0 :(得分:3)

大多数单元测试不希望或者需要应用程序上下文全部旋转并填充。单元测试可以向应用程序上下文添加他们想要的任何内容。在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__'
    }
}

该测试将通过Grails 2.4.2。

我希望有所帮助。