Я серьезно провожу очень неприятное время тестирования с использованием Grails. Я опишу свой опыт, и я хотел бы знать, есть ли лучший способ.
- Первая проблема, с которой я столкнулся при тестировании, заключается в том, что Grails не дает немедленной обратной связи разработчику, когда .save() терпит неудачу во время интеграционного теста. Допустим, у вас есть доменный класс с 12 полями, и одно из них нарушает ограничение, и вы не знаете об этом, когда создаете экземпляр... он просто не сохраняется. Естественно, после этого тестовый код не сработает.
Это наиболее хлопотно, потому что тестируемая штуковина, вероятно, в порядке ... и реальный риск и боль - это код установки для самого теста.
Итак, я попытался выработать привычку использовать .save(failOnError: true), чтобы избежать этой проблемы, но это не то, что может быть легко применено всеми, кто работает над проектом... и это немного раздуто. Было бы неплохо включить это для кода, который автоматически выполняется как часть модульного теста.
Интеграционные тесты работают медленно. Я не могу понять, как 1 интеграционный тест, сохраняющий 1 объект, выполняется за 15-20 секунд. При тщательном планировании тестов я смог получить 1000 тестов, взаимодействующих с реальной базой данных и выполняющих дампы dbunit после каждого теста примерно за одно и то же время! Это глупо.
В IDEA сложно запустить все модульные тесты, а не интеграционные.
Интеграционные тесты — это огромная боль. Idea фактически показывает ЗЕЛЕНУЮ полосу, когда интеграционные тесты терпят неудачу. Вывод, выдаваемый Grails, указывает на то, что что-то пошло не так, но не говорит, что именно. В нем говорится, что нужно смотреть в отчетах об испытаниях ... что заставляет разработчика запускать свою файловую систему, чтобы найти этот дурацкий html-файл. Какая боль.
Затем, как только вы получите html-файл и щелкнете по неудачному тесту, он сообщит вам номер строки. Поскольку этих отчетов нет в среде IDE, вы не можете просто щелкнуть трассировку стека, чтобы перейти к этой строке кода... вам нужно вернуться и найти ее самостоятельно. АРГХ!@!@!
Может быть, люди и мирятся с этим, но я отказываюсь. Тестирование не должно быть таким болезненным. Это должно быть быстро и безболезненно, иначе люди не будут этого делать.
Пожалуйста помоги. Каково решение? Rails вместо Grails? Что-то совсем другое? Мне нравится фреймворк Grails, но по какой-то причине они никогда не демонстрируют свое тестирование. У них шикарный фреймворк, но тестирование болезненно.
После использования Scala в течение последних 1,5 месяцев и полного избалованности ScalaTest... Я не могу вернуться к этому.