Как имитировать службу, внедренную в доменный класс из тестового класса контроллера?

У меня есть класс предметной области, который расширяет абстрактный класс, который внедряет сервис spring security core plugin .

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

Если я запускаю вышеуказанный тест, я получаю:

test -app ExtraController.testEdit --unit --echoOut | Запуск 1 модульного теста... 1 из 1 --Вывод из testEdit --| Ошибка :testEdit (com.softamo.movilrural.ExtraControllerTests )| java.lang.NullPointerException :Невозможно получить свойство «currentUser» для нулевого объекта. на com.softamo.movilrural.WithOwner.getCurrentUser (WithOwner.groovy :8 )at com.softamo.movilrural.WithOwner.isLoggedUserTheOwner (WithOwner.groovy :18 )на com.softamo.movilrural.ExtraController.edit (ExtraController.groovy :39 )в com.softamo.movilrural.ExtraControllerTests.testEdit (ExtraControllerTests.groovy :69 )| Завершен 1 модульный тест, 1 завершился неудачно за 853 мс

Я безуспешно пытался издеваться над службой безопасности, подобной этой:

Extra.metaClass.springSecurityService = new MockSpringSecurityService(user1)

или даже издеваться над методом

Extra.metaClass.getCurrentUser = { return user1 }

Любая идея, как я могу обойти эту проблему.

7
задан Sergio del Amo 23 April 2012 в 06:28
поделиться