Регистрация Grails во время интеграционных тестов - PullRequest
14 голосов
/ 26 октября 2010

У меня есть несколько проблем с журналированием Grails во время теста [работает grails test-app, Grails 1.3.5]:

1

У меня есть некоторая отладка / информация для входа в системумое приложение, и оно отлично работает при запуске приложения [grails run-app].Однако, когда я хочу протестировать свое приложение, оно не записывается ни в файлы System.out / System.err, ни в файл appender.Как я могу включить это?

У меня есть строки log.debug () и log.info () в моих классах домена.в контроллерах и в классах, расположенных в src / groovy.

Когда я хотел включить ведение журнала во время теста, я просто скопировал настройки из своей среды разработки и изменил корневой логгер с info на debug:

    appenders {
        file name: 'file', file: 'mylog.log'
    }

    root {
        debug 'stdout', 'file'
    }

    debug 'grails.app'


    error 'org.codehaus.groovy.grails.web.servlet',  //  controllers
            'org.codehaus.groovy.grails.web.pages', //  GSP
            'org.codehaus.groovy.grails.web.sitemesh', //  layouts
            'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
            'org.codehaus.groovy.grails.web.mapping', // URL mapping
            'org.codehaus.groovy.grails.commons', // core / classloading
            'org.codehaus.groovy.grails.plugins', // plugins
            'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
            'org.springframework',
            'org.hibernate',
            'net.sf.ehcache.hibernate'

    warn 'org.mortbay.log'

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

Здесь стоит кое-что упомянуть: я вижу свои строки log.info (), указанные в классах Test.

2 Я не могу указать log.отладка в тестовых классах.Я получаю исключение пропущенного метода при попытке сделать log.debug.log.info работает просто отлично.Как так?Я думал, что это такое же внедрение, как в контроллерах / доменах.

3 Вся информация, зарегистрированная в тестовых классах во время теста, отправляется в System.err вместо System.out.Grails даже использует конфигурацию log4j от Config.groovy?

Заранее спасибо, Кристиан

Ответы [ 2 ]

4 голосов
/ 27 октября 2010

я просто определяю свой собственный регистратор и внедряю его в контроллер или службу в моем тестовом примере.

    BasicConfigurator.configure() 
    LogManager.rootLogger.level = Level.DEBUG
    log = LogManager.getLogger("MailService")

    MailService.class.metaClass.getLog << {-> log}

Я не верю, что свойство журнала вводится в тестовые классы

Я также делал это раньше, что оказалось скорее хаком, но сработало

    def logger = new Expando(
            debug: { println it },
            info: { println it },
            warn: { println it },
            error: { println it })
    MailService.metaClass.getLog = {-> logger }
    MailServiceService.metaClass.getLog = {-> logger }
    MailIngestJobTests.metaClass.getLog = {-> logger }

Окончательное решение кода Здесь

1 голос
/ 26 ноября 2010

Я думаю, что вы можете использовать что-то вроде:

mockLogging(Foo, true)

Где Foo - это домен, служба и т. Д.

Это будет записывать сообщения log.debug в вашу консоль.Просто попробуйте удалить его, прежде чем делать какие-либо отчеты, так как они станут слишком длинными :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...