Тест контроллера, сгенерированный Grails, не работает в подклассе

Я пытаюсь протестировать контроллер для подкласса в Grails 2.4.3. модель домена такая:

abstract class Task { ... }

class SubTask extends Task { ... }

При попытке запустить сгенерированные тесты для класса SubTaskController 3 из 7 тестов терпят неудачу:

  1. спасти
  2. Обновить
  3. удалять

Кажется, что (по крайней мере) идентификатор класса домена не инициализирован, хотя я определил это в методе populateValidParams(). Отладчик показывает два (!) сгенерированных атрибута id в объекте subTaskInstance, оба пустые. Когда я устанавливаю идентификатор в какое-то длинное значение в отладчике, ошибка появляется, по крайней мере, через несколько строк. Есть ли ошибка в насмешках над подклассами или я делаю что-то принципиально неправильное?

Я также пробовал без «абстрактного» в базовом классе, но получил те же ошибки. Сгенерированные тесты отлично работают для объектов, не входящих в иерархию наследования.

Когда я дополнительно устанавливаю атрибут id непосредственно в тестовом коде, тесты завершаются ошибкой при утверждении SubTask.count() == 1. Кажется, что макет уровня сохраняемости не обрабатывает подклассы.


person Geobe    schedule 21.10.2014    source источник
comment
Есть ли шанс, что вы могли бы показать нам код?   -  person Dónal    schedule 21.10.2014
comment
Я ожидаю, что populateValidParams не добавляет необходимые параметры запроса. См. проект, указанный в моем ответе ниже.   -  person Jeff Scott Brown    schedule 21.10.2014
comment
Спасибо, Джефф, ты вернул меня на правильный путь ;). Я забыл инициализировать свойство с ограничением размера 0..2000 . Не совсем очевидно, что вам нужно инициализировать это, но в любом случае...   -  person Geobe    schedule 21.10.2014
comment
@Geobe Отлично. Я рад, что у тебя все получилось.   -  person Jeff Scott Brown    schedule 22.10.2014
comment
Я не уверен, почему этот вопрос в настоящее время имеет близкое голосование за неясность того, что вы спрашиваете. В 99% случаев, когда эти 3 теста, в частности, терпят неудачу, это происходит из-за того, что тест не заполнил свойства параметров запроса, либо потому, что они вообще не заполнены, либо потому, что они заполнены значениями, которые не согласуются с ограничениями.   -  person Jeff Scott Brown    schedule 22.10.2014


Ответы (1)


См. проект по адресу https://github.com/jeffbrown/controllerinheritancetest. Оба юнит-теста контроллера там проходят.

Вы уверены, что установили правильные данные в свой метод populateValidParams в модульном тесте контроллера? Это вероятная причина ваших неудачных тестов.

person Jeff Scott Brown    schedule 21.10.2014