我们正在准备 Grails 2.4 升级。我们面临的问题之一是 大多数命令对象单元测试由于注入(inject)的属性而失败,例如 services,在验证期间必须不为空。
有什么建议的方法来测试这个吗?尽管有些属性不需要进行测试,但我们是否应该模拟所有属性?或者有没有办法以不同的方式做到这一点?
杰夫回答了我的问题后,我分享了包含有关新功能的更多信息的链接: doWithSpring 和 doWithConfig 在 2.4 新增功能中进行了简要描述:http://grails.org/doc/latest/guide/introduction.html#whatsNew24在单元测试改进部分 还有一个 JIRA 问题,例如:https://jira.grails.org/browse/GRAILS-11003
最佳答案
大多数单元测试不希望或不需要应用程序上下文全部启动和填充。单元测试可以向应用程序上下文添加他们想要的任何内容(或什么都不添加)。在最新版本的 Grails 中,您可以执行以下操作...
Controller 和命令对象:
// 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 将会通过该测试。
希望对您有所帮助。
关于Grails 2.4 命令对象可为空约束和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838724/