Как мне создать макет службы аутентификации acegi для модульного тестирования?

#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] }