У меня есть класс предметной области, который расширяет абстрактный класс, который внедряет сервис 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 }
Любая идея, как я могу обойти эту проблему.