#unit-testing #grails #groovy #spring-security
#модульное тестирование #grails #groovy #spring-безопасность
Вопрос:
Это мой метод класса обслуживания 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 для модульного тестирования?
Я пробовал модульный тест как :
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
}
Но,
Когда я запускаю тесты, это выдает :
Testsuite: SomeServiceTests
Количество выполненных тестов: 1, сбоев: 0, Ошибок: 1, Прошедшее время: 1.069 сек.
Вызвало ОШИБКУ
0
java.lang.Исключение ArrayIndexOutOfBoundsException: 0
в grails.test.DemandProxy.invokeMethod(GrailsMock.groovy: 171)
в SomeServiceTests.testGetUserName(SomeServiceTests.groovy: 230)
Я не могу решить проблему. Любая помощь приветствуется, спасибо…
Ответ №1:
Эти строки не имеют смысла для меня:
authService.demand.userDomain().customerid { -> return 111}
authService.demand.userDomain().userid { -> return 222}
Попробуйте что-то вроде этого вместо этого:
authService.demand.getUserDomain(2..2) { -> return [customerid:111, userid: 222] }