Как я могу издеваться над сервисом аутентификации acegi для модульного тестирования? - PullRequest
1 голос
/ 19 апреля 2011

Это метод класса обслуживания моего Грааля:

<code>class SomeService {<br>
def authenticateService<br>
def getUserName() {
    def cid = authenticateService.userDomain().customerid
    def uid = authenticateService.userDomain().userid
    def userDetails = User.findByCustomerIdAndUserId(cid, uid)<br>
    return userDetails.lastName+", "+userDetails.firstName
}

Как создать макет для сервиса authenticateService, предоставляемого модулем безопасности acegi для модульного тестирования?

Я попробовал юнит-тест как:

<code>
class SomeServiceTests extends GrailsUnitTestCase {
... 
...
def testGetUserName() {
    def service = new SomeService()<br>
    def authService = mockFor(AuthenticateService)
    authService.demand.userDomain().customerid { -> return 111}
    authService.demand.userDomain().userid { -> return 222}
    service.authenticateService = authService.createMock()<br>
    def uName = service.getUserName()<br>
    asserNotNull uName
}
Но, Когда я запускаю тесты, это дает:

Testsuite: SomeServiceTests
Выполнено тестов: 1, сбоев: 0, ошибок: 1, прошедшее время: 1,069 с
Вызвал ОШИБКУ
0
java.lang.ArrayIndexOutOfBoundsException: 0
at grails.test.DemandProxy.invokeMethod (GrailsMock.groovy: 171)
at SomeServiceTests.testGetUserName (SomeServiceTests.groovy: 230)

Я не могу решить проблему. Любая помощь приветствуется, спасибо ...

1 Ответ

2 голосов
/ 19 апреля 2011

Эти строки не имеют смысла для меня:

authService.demand.userDomain().customerid { -> return 111}
authService.demand.userDomain().userid { -> return 222}

Попробуйте что-то вроде этого:

authService.demand.getUserDomain(2..2) { -> return [customerid:111, userid: 222] }
...