【发布时间】:2013-06-18 15:09:49
【问题描述】:
我有一个像这样的示例域
class User {
String username
String password
def userHelper
static contraints = {
username(nullable: false, blank: false)
password nullable: false, blank: false, validator: {pwd, userInstance ->
return userInstance.userHelper.validatePassword(pwd)
}
}
}
userHelper 正在由我的resources.groovy 中的以下人员注入
beans = {
userHelper(UserHelper)
}
当我从浏览器测试我的应用程序时,一切运行良好。但是,在尝试为此编写功能测试时出现异常。
错误提示:Cannot invoke method validatePassword() on null object
所以我假设在我运行我的功能测试用例时没有设置userHelper。
我的测试用例如下所示:
@TestFor(UserController)
@Mock([User])
class UserControllerSpecification extends Specification {
def "save user" () {
given:
request.contentType = "application/json"
request.JSON = """
{user:
{
username: "somtething"
password: "something"
}
}
"""
when:
controller.save()
then:
User.count() == 1
}
}
更新
控制器:
class UserController {
def userService
def save() {
def user = new User(params?.user)
request.withFormat {
json {
if(user.validate())
userService.processUser()
//do something
else
//do something else
}
}
}
}
问题
- 如何在运行测试之前在
User域上设置userHelper属性? - 在运行所有功能和集成测试用例之前,如何在
Bootstrap.groovy中运行我的代码?
【问题讨论】:
-
您是指
return userInstance.userHelper.validatePassword(pwd),还是return userHelper.validatePassword(pwd)? -
我的意思是
return userInstance.userHelper.validatePassword(pwd),据我所知,validation的第二个参数是正在验证的域类实例