Как лучше всего протестировать использование Grails с помощью IDEA?

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

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

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

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

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

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

  3. Интеграционные тесты — это огромная боль. Idea фактически показывает ЗЕЛЕНУЮ полосу, когда интеграционные тесты терпят неудачу. Вывод, выдаваемый Grails, указывает на то, что что-то пошло не так, но не говорит, что именно. В нем говорится, что нужно смотреть в отчетах об испытаниях ... что заставляет разработчика запускать свою файловую систему, чтобы найти этот дурацкий html-файл. Какая боль.

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

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

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

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


person egervari    schedule 20.05.2010    source источник
comment
+1 к презентации без Grails, на самом деле показывающей тестирование. Они все создают следующий твиттер или блог за 30 минут, а тесты всегда прекращаются.   -  person npiv    schedule 24.04.2011


Ответы (1)


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

grails.gorm.failOnError=true

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

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

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

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

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

grails integrate-with --intellij

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

person Ted Naleid    schedule 20.05.2010
comment
На самом деле, в версии 9.0.2 была ошибка в Grails, которая вызывала эту проблему с зеленой полосой. Как только я обновился до 9.0.3, все заработало. Цифры ;) - person egervari; 21.05.2010