2008-11-19 7 views
4

В grails-framework некоторые объекты используют журнал. Обычно это вводится граалем. Он работает над исполнением «grails test-app». Но тот же тест (интеграционный тест) терпит неудачу при выполнении «grails test-app -integration».Почему автоматическая вставка лог-объекта не всегда работает в граале?

Что здесь не так, и я могу каким-то образом заставить инъекцию лог-объекта?

+0

Является ли ваша введенная служба сеансом или запросом областью? Я вижу, что тестовый пример не получается в этом случае (хотя вы должны увидеть хорошее сообщение об исключении). – billjamesdev 2008-11-20 03:57:15

ответ

3

Какую версию grails вы используете? Он отлично работает для обеих ситуаций для меня на 1.0.4 (последний).

создать новое пустое приложение и создал класс обслуживания с интеграционным тестом:

FooService.groovy:

class FooService { 
    def logSomething(message) { 
     log.error(message) 
     return true 
    } 
} 

FooServiceTests.groovy:

class FooServiceTests extends GroovyTestCase { 
    def fooService 
    void testSomething() { 
    assert fooService.logSomething("it works") 
    } 
} 

При запуске просто тест -app, я получаю сообщение журнала:

% grails test-app    

Welcome to Grails 1.0.4 - http://grails.org/ 
.... 
------------------------------------------------------- 
Running 1 Integration Test... 
Running test FooServiceTests... 
         testSomething...[4174] service.FooService it works 
SUCCESS 
Integration Tests Completed in 440ms 
------------------------------------------------------- 
... 

При работе только интеграционные тесты, он также работает:

% grails test-app -integration 

Welcome to Grails 1.0.4 - http://grails.org/ 
.... 
------------------------------------------------------- 
Running 1 Integration Test... 
Running test FooServiceTests... 
        testSomething...[4444] service.FooService it works 
SUCCESS 
Integration Tests Completed in 481ms 
------------------------------------------------------- 
.... 

Вы munging вокруг с классом регистратора (или перезаписывает любой метакласса материал на регистраторе, в любой из предыдущих классов интеграции или модульных тестов, а не то повторно инициализация metaClass?

+0

Мы используем Grails 1.0.3, но в следующий раз переключимся на 1.0.4. Я увижу, если обновление изменит ситуацию. – Mnementh 2008-11-21 11:46:53

1

Я только что это точно проблема, и это очень легко решается с помощью вызова функции mockLogging:

void testTheMagic() { 
    mockLogging(MyMagicService) 
    def testService = new MyMagicService() 
    ... 
} 

(с использованием Grails 1.1.1, если это имеет значение)

+0

Просто примечание: если у вас есть метод setUp, вам нужно вызвать super.setUp(), если вы еще этого не сделали – 2011-10-07 12:27:57

0

Я используя 1.3.2, и вход в тестовый файл работает нормально. Просто убедитесь, что вы указали конфигурацию log4j для тестовой среды.