2012-04-26 4 views
4

Время от времени я сталкиваюсь с проблемой, что тесты интеграции Grails, имя которых заканчивается на «IntegrationTests», не работают с исключениями, которые показывают, что методы GORM не были добавлены в классы домена. После переименования этих тестов в «* IntegrationTest» (no s at the end) они работают нормально.Являются ли интеграционные тесты Grails чувствительными к их имени?

Короткий пример:

class MyIntegrationTests { 
    @Test 
    void myTest() { 
     assert MyDomainClass.count() == 0 
    } 
} 

потерпит неудачу со следующим исключением:

Failure: myTest(de.myproject.MyIntegrationTests) 
    groovy.lang.MissingMethodException: No signature of method: de.myproject.MyDomainClass.count() is applicable for argument types:() values: [] 
Possible solutions: count(), ident(), print(java.io.PrintWriter), print(java.lang.Object), getCount(), wait() 
at de.myproject.MyIntegrationTests.myTest(MyIntegrationTests.groovy:9) 

После переименования MyIntegrationTests в MyIntegrationTest тест пройден.

Есть ли какая-то магия в соответствии с названием теста? Все, что я нашел в документации Grails: «Тесты также могут использовать суффикс теста вместо тестов». Любые идеи?

ответ

3

В конце концов я нашел причину для различного поведения «* Test» и «*» Испытания себе: Различный postfixes изменить порядок, в котором тесты выполняются в настоящее время. Чтобы ухудшить ситуацию, точный порядок зависит от платформы. Таким образом, мои тесты выполнялись локально (OSX) в другом порядке, чем на моей машине CI (Linux), и, тем самым, дали разные результаты.

Почему исключение происходит в некотором порядке - это совершенно другая проблема, хотя я еще не выяснил (пока).

0

Это должно работать так, как было у вас изначально, если файл находится в папке integration. Вы уверены, что у вас его нет в тестовой папке unit, а затем переместите его в папку integration при переименовании? Или, возможно, вы используете intellij, и вы выполнили тест «junit», а не «grails»?

Ошибка, которую вы получаете, по-видимому, подразумевает, что grails не запускался при запуске теста.

+0

Не было перемещение из тестовой папки в тестовую папку интеграции. И нет, я использовал "grails test-app integration:" для запуска тестов не IntelliJ. – johanneslink

+0

Фактически, когда я назвал интеграционный тест с суффиксом Spec, который был по умолчанию. Мой интеграционный тест не прошел? Является ли суффикс спецификации неправильным в тесте интеграции? – Rradhak

0

Ваш тест не будет выполнен, если у него нет суффикса Tests.

, скопированные из Grails документации домашней страницы (http://grails.org/doc/latest/guide/testing.html):

Класс суффикс имен по умолчанию тесты, но по состоянию на Grails 1.2.2 , также подтверждается суффикс теста .

j-

Смежные вопросы