我有一個域類,它擴展了一個抽象類,它注入了spring security core plugin服務。如何模擬從Controller測試類中注入到域類中的服務?
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
}
}
如果我運行上面的測試中,我得到:
測試應用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)上的空對象 上無法獲取屬性'currentUser'。com.softamo.movilrural.WithOwner.isLoggedUserTheOwner(WithOwner.groovy:18)上的 ) at com.softamo.movilrural.ExtraController.edit(ExtraController.groovy:39) at com.softamo.movilrural.ExtraControllerTests.testEdit(ExtraControllerTests.groovy:69) |完成1個單元測試,1未能在853ms
我曾嘗試沒有成功嘲笑這樣的安全服務:
Extra.metaClass.springSecurityService = new MockSpringSecurityService(user1)
甚至嘲諷的方法
Extra.metaClass.getCurrentUser = { return user1 }
任何想法,我怎麼可能解決這個問題。
您好!我陷入了同樣的問題。你有沒有爲你的問題找出解決方案?或者,也許你有一個側面注入一個域對象內的服務沒有單元測試自動裝配? – snowindy 2012-11-18 19:47:53
這個問題有什麼好運?,面臨同樣的問題。 – 2015-11-01 06:27:29