Grails: как выполнить модульное тестирование командного объекта с введенной в него службой
Я пытаюсь проверить контроллер, который имеет объект Command с привязкой данных.
Командный объект имеет сервис, внедренный в него.
Но когда я пытаюсь проверить объект команды, внедренный метод обслуживания никогда не обнаруживается, поскольку он никогда не «внедряется»
Есть ли способ смоделировать сервис внутри объекта команды?
Метод испытания
void testLoginPasswordInvalid() {
mockRequest.method = 'POST'
mockDomain(User, [new User(login:"freddy", password:"realpassword")])
mockLogging(UserService) // userService mocked
MockUtils.prepareForConstraintsTests(LoginCommand)
def userService = new UserService()
def user = userService.getUser("freddy")//Gets called and returns the mockDomain
assert userService.getUser("freddy")//Passes
def cmd = new LoginCommand(login:"freddy", password:"letmein")
cmd.validate() // Fails (userService is nevr injected)
controller.login(cmd)
assertTrue cmd.hasErrors()
assertEquals "user.password.invalid", cmd.errors.password
assertEquals "/store/index", renderArgs.view
}
Метод getUser () пользователя userService не найден
Cannot invoke method getUser() on null object
java.lang.NullPointerException: Cannot invoke method getUser() on null object
Код
Метод входа в систему вызываемого контроллера,
def login = { LoginCommand cmd ->
if(request.method == 'POST') {
if(!cmd.hasErrors()){
session.user = cmd.getUser()
redirect(controller:'store')
}
else{
render(view:'/store/index', model:[loginCmd:cmd])
}
}else{
render(view:'/store/index')
}
}
Командный объект имеет "userService", введенный в него.
Валидатор вызывает этот userService, чтобы найти пользователя
class LoginCommand {
def userService
String login
String password
static constraints = {
login blank:false, validator:{ val, cmd ->
if(!cmd.userService.getUser()){
return "user.not.found"
}
}
}
UserService.getUser () выглядит следующим образом.
class UserService {
boolean transactional = true
User getUser(String login) {
return User.findByLogin(login)
}
}