Grails2.4命令对象可空约束和依赖注入
我们正在为Grails2.4升级做准备。我们面临的问题之一是 大多数命令对象单元测试由于注入的属性而失败,如 验证期间,服务必须不为null 是否有任何建议的方法来测试这一点?尽管测试不需要某些属性,但我们是否应该模拟所有属性?或者有没有不同的方法 Jeff回答了我的问题后,我与大家分享了更多关于新功能的链接: doWithSpring和doWithConfig将在2.4中的新增内容:单元测试改进部分中简要介绍Grails2.4命令对象可空约束和依赖注入,grails,grails-2.4,Grails,Grails 2.4,我们正在为Grails2.4升级做准备。我们面临的问题之一是 大多数命令对象单元测试由于注入的属性而失败,如 验证期间,服务必须不为null 是否有任何建议的方法来测试这一点?尽管测试不需要某些属性,但我们是否应该模拟所有属性?或者有没有不同的方法 Jeff回答了我的问题后,我与大家分享了更多关于新功能的链接: doWithSpring和doWithConfig将在2.4中的新增内容:单元测试改进部分中简要介绍 示例中还有一个JIRA问题:大多数单元测试不希望或不需要应用程序上下文全部启动和填充
示例中还有一个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
。谢谢JeffdoWithSpring
回答了我的问题。我本可以描述doWithSpring,但我认为一个简单但完整的例子通常是最好的展示方式。很高兴你们都准备好了。@danielad:请不要像这样添加代码跨度()来强调。有关更多信息,请参阅。