Каков наилучший способ тестирования с использованием грааля с использованием IDEA? - PullRequest
2 голосов
/ 20 мая 2010

У меня очень неприятное время, когда я провожу тестирование с использованием Grails. Я опишу свой опыт, и я хотел бы знать, есть ли лучший способ.

  1. Первая проблема, с которой я столкнулся при тестировании, заключается в том, что Grails не дает немедленной обратной связи разработчику при сбое .save () внутри интеграционного теста. Допустим, у вас есть класс домена с 12 полями, и одно из них нарушает ограничение, и вы не знаете его при создании экземпляра ... он просто не сохраняется. Естественно, что тестовый код впоследствии потерпит неудачу.

Это наиболее неприятно, потому что тестируемый предмет, вероятно, в порядке ... а реальный риск и боль - это код настройки для самого теста.

Итак, я попытался выработать привычку использовать .save (failOnError: true), чтобы избежать этой проблемы, но это не то, что легко может быть применено всеми, кто работает над проектом ... и это отчасти вздор , Было бы неплохо включить это для кода, который выполняется как часть модульного теста автоматически.

  1. Интеграционные тесты работают медленно. Я не могу понять, как 1 интеграционный тест, который сохраняет 1 объект, занимает 15-20 секунд для запуска. Благодаря тщательному планированию тестов, я смог получить 1000 тестов, обращающихся к реальной базе данных, и делать дампы dbunit после каждого теста, проводимого примерно в одно и то же время! Это глупо.

  2. Трудно запустить все модульные тесты, а не интеграционные тесты в IDEA.

  3. Интеграционные тесты - огромная боль. Идея фактически показывает ЗЕЛЕНЫЙ БАР, когда интеграционные тесты не пройдены. Вывод, предоставленный grails, указывает, что что-то не удалось, но не говорит, что это было. Это говорит о том, что нужно смотреть в протоколах испытаний ... что заставляет разработчика запускать свою файловую систему для поиска глупого html-файла. Что за боль.

Затем, как только вы получите html-файл и перейдете к провалу теста, он сообщит вам номер строки. Поскольку этих отчетов нет в IDE, вы не можете просто щелкнуть трассировку стека, чтобы перейти к этой строке кода ... вам нужно вернуться и найти ее самостоятельно. ARGGH! @! @!

Может быть, люди с этим мирились, но я отказываюсь. Тестирование не должно быть таким болезненным. Это должно быть быстро и безболезненно, иначе люди не будут этого делать.

Пожалуйста, помогите. Каково решение? Рельсы вместо Грааля? Что-то еще целиком? Мне нравится среда Grails, но по какой-то причине они никогда не демонстрируют свои тесты. У них шикарная структура, но тестирование болезненно.

После использования Scala в течение последних 1,5 месяцев и полной испорченности ScalaTest ... я не могу вернуться к этому.

1 Ответ

2 голосов
/ 20 мая 2010

Вы можете установить это свойство в вашем конфигурационном файле:

grails.gorm.failOnError=true

Это сделает общесистемное значение по умолчанию для сохранения (которое вы можете переопределить с помощью .save (failOnError: false), если хотите).

Если вы хотите, чтобы такое поведение было только в тесте, вы можете поместить его в определенную среду конкретной среды в Config.groovy. Мне на самом деле нравится это как поведение всего проекта.

Я уверен, что есть способ включить / выключить failOnError в определенной области, но я пока не исследовал, как это сделать (возможно, это будет хороший пост в блоге, я обновлю его, если напишу один).

Я не уверен, что вы неправильно настроили IDEA, но он показывает мне красную полосу, когда мои тесты не пройдены, и я могу щелкнуть строки в трассировке стека и получить доступ к проблемам. Последняя версия intellij даже рушит большинство метаклассов, что неинтересно при попытке исправить проблемы.

Если вы еще этого не сделали для создания своего проекта, я бы попытался стереть ваши существующие файлы .ipr / .iml / .iws / .idea и запустить эту команду, чтобы Grails восстановил вашу конфигурацию:

grails integrate-with --intellij

Затем запустите файл .ipr, который будет сгенерирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...