Быстрый запуск единого интеграционного теста в Grails - PullRequest
9 голосов
/ 25 мая 2010

Возможно ли в Grails быстро запустить одиночный / весь интеграционный тест в классе. Тестовое приложение поставляется с большим багажом очистки всех скомпилированных файлов и генерации отчетов cobertura, следовательно, даже если мы запустим один интеграционный тест, вся база кода будет скомпилирована, оснащена инструментами, и отчет cobertura генерируется. Для нашего приложения это занимает более 2 минут.

Если бы можно было быстро запустить один интеграционный тест и получить быструю обратную связь, это было бы очень полезно.

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

Спасибо

Ответы [ 3 ]

15 голосов
/ 25 мая 2010

Если у вас есть класс интеграционного тестирования

class SimpleControllerTests extends GrailsUnitTestCase {
    public void testLogin() {}
    public void testLogin2() {}
    public void testLogin3() {}
}

Вы можете запустить только один тест в этом классе, используя:

grails test-app integration: SimpleController.testLogin

Однако вам все равно придется понести временные потери, необходимые для тестирования интеграции (загрузка конфигурации, подключение к БД, создание экземпляров Spring-компонентов и т. Д.)

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

5 голосов
/ 25 мая 2010

Целью интеграционного теста является выполнение всей этой компиляции, создания базы данных, запуска сервера и т. Д., Поскольку тесты должны выполняться в интегрированной среде, как следует из названия.

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

Вы можете отключить Cobertura, разместив следующий код в вашем grails-app / conf / BuildConfig.groovy:

coverage {
    enabledByDefault = false
}
0 голосов
/ 30 марта 2016

Как вы заявили, большую часть времени вы настраиваете среду приложения, внедряете компоненты и делаете динамические аннотации классов. Вы можете ускорить цикл интеграционных испытаний, загрузив его только один раз, запустив свои тесты в грале REPL.

Однако компромисс заключается в том, что в REPL есть проблемы с динамической перезагрузкой. Если вы видите случайные странности, выйдите из REPL и перезагрузите.

$> ./grailsw --plain-output
|Loading Grails 2.5.3
|Configuring classpath
|Enter a script name to run. Use TAB for completion: 
grails> test-app -integration
... (loads some things)
...
grails> test-app -integration
... (faster loading)

И чтобы ответить другим комментаторам - также полезны интеграционные тесты, есть код, который нельзя протестировать с помощью модульного теста (например, тестирование HQL или SQL-запросов).

...