【发布时间】:2011-08-08 16:49:44
【问题描述】:
这是我的 grails 服务类方法:
class SomeService {
def authenticateService
def getUserName() {
def cid = authenticateService.userDomain().customerid
def uid = authenticateService.userDomain().userid
def userDetails = User.findByCustomerIdAndUserId(cid, uid)
return userDetails.lastName+", "+userDetails.firstName
}
如何为 acegi 安全插件提供的 authenticateService 创建一个 mock 用于单元测试?
我尝试了一个单元测试:
class SomeServiceTests extends GrailsUnitTestCase {
...
...
def testGetUserName() {
def service = new SomeService()
def authService = mockFor(AuthenticateService)
authService.demand.userDomain().customerid { -> return 111}
authService.demand.userDomain().userid { -> return 222}
service.authenticateService = authService.createMock()
def uName = service.getUserName()
asserNotNull uName
}
但,
当我运行测试时,它给出:
测试套件:SomeServiceTests
测试运行:1,失败:0,错误:1,经过时间:1.069 秒
导致错误
0
java.lang.ArrayIndexOutOfBoundsException: 0
在 grails.test.DemandProxy.invokeMethod(GrailsMock.groovy:171)
在 SomeServiceTests.testGetUserName(SomeServiceTests.groovy:230)
我无法解决问题。任何帮助表示赞赏,谢谢...
【问题讨论】:
标签: unit-testing grails groovy spring-security