我有一个域类,它扩展了一个抽象类,它注入了spring 安全核心插件服务。
class Extra extends WithOwner {
String name
}
abstract class WithOwner {
transient springSecurityService
User user
def getCurrentUser() {
return springSecurityService.currentUser
}
def beforeValidate() {
if(!user) {
user = getCurrentUser()
}
}
Boolean isLoggedUserTheOwner(){
return (user?.id == getCurrentUser()?.id)
}
}
我想实现一个控制器测试。
@TestFor(ExtraController)
@Mock([Extra, User, UserRole, Role])
class ExtraControllerTests {
void testEdit() {
def utils = new TestUtils()
def user1 = utils.saveUser1()
populateValidParams(params)
def extra = new Extra(params)
extra.user = user1
assert extra.save() != null
params.id = extra.id
def model = controller.edit() // Line 69
assert model.extraInstance == extra
}
}
如果我运行上述测试,我会得到:
test-app ExtraController.testEdit --unit --echoOut | 运行 1 个单元测试... 1 of 1 --testEdit 的输出-- | 失败:testEdit(com.softamo.movilrural.ExtraControllerTests) | java.lang.NullPointerException:无法在 com.softamo.movilrural.WithOwner.getCurrentUser(WithOwner.groovy:8) 的 com.softamo.movilrural.WithOwner.isLoggedUserTheOwner(WithOwner.groovy:18) 的空对象上获取属性“currentUser” com.softamo.movilrural.ExtraController.edit(ExtraController.groovy:39) 在 com.softamo.movilrural.ExtraControllerTests.testEdit(ExtraControllerTests.groovy:69) | 完成 1 个单元测试,1 个在 853 毫秒内失败
我曾尝试像这样模拟安全服务但没有成功:
Extra.metaClass.springSecurityService = new MockSpringSecurityService(user1)
甚至嘲笑该方法
Extra.metaClass.getCurrentUser = { return user1 }
知道我该如何解决这个问题。