Вы должны использовать mockCommandObject
в тестах:
mockCommandObject(CategoryCommand)
Позволяет использовать метод validate()
и легко получать доступ к свойству errors
.Я сделал несколько модульных тестов для командных объектов, и в моем случае это работает очень хорошо.
EDIT
Я заметил странное поведение, в основном не знаю почему.У меня есть объект команды:
class ChangePasswordCommand {
String oldPassword
String newPassword
String newPassword2
static constraints = {
oldPassword(blank: false)
newPassword(blank: false, matches: ConfigurationHolder.config.application.password.regex)
newPassword2(blank: false, validator: { val, obj ->
if (val != obj.newPassword) {
return 'registration.password.mismatch.error'
}
})
}
}
У меня также есть тест (и mockCommandObject(ChangePasswordCommand)
в setUp()
метод):
void testChangePasswordCommand_errors() {
def cmd = new ChangePasswordCommand(oldPassword: '', newPassword: 'SomePass', newPassword2: 'SomeOtherPass')
//def cmd = new ChangePasswordCommand()
assertFalse cmd.validate()
assertTrue cmd.hasErrors()
assertEquals 3, cmd.errors.getErrorCount()
assertEquals 'blank', cmd.errors.getFieldError('oldPassword').getCode()
assertEquals 'matches.invalid', cmd.errors.getFieldError('newPassword').getCode()
assertEquals 'registration.password.mismatch.error', cmd.errors.getFieldError('newPassword2').getCode()
}
Когда я запускаю тест, он проходит.Но когда я комментирую первую строку и раскомментирую вторую, чтобы пустой объект команды был введен в тестирование, проверка завершается неудачно при подтверждении cmd.validate()
.Кроме того, когда я комментирую утверждение cmd.validate()
, оно также терпит неудачу при утверждении cmd.hasErrors()
.Затем я удалил настройку свойства oldPassword в первой строке
def cmd = new ChangePasswordCommand(newPassword: 'SomePass', newPassword2: 'SomeOtherPass')
, и тест также не прошел.Похоже, он тормозит из-за null
значения свойства.Я не могу этого объяснить.
РЕДАКТИРОВАТЬ 2
Я слепой или что-то в этом роде.mockCommandObject
добавляет validate()
метод, но не добавляет hasErrors()
метод.В моем тесте в setUp()
у меня также:
ChangePasswordCommand.metaClass.hasErrors() { !delegate.validate() }