Grails test-app для вывода на консоль
Я новичок в grails, пришедший из Django.
Используя тестовую разработку, я привык к написанию тестов, а затем к фактической функциональности. Что мне хорошо подходит для написания теста, запустите функцию с некоторым отладочным результатом, чтобы увидеть это состояние переменных до тех пор, пока не пройдет unit test, а затем переместите вывод отладки.
В grails "grails test-app" вывод "log.debug" и "println" не записывается в консоль, и он также не находится в сообщении.
В документации указывается использование mocklogging, которая должна выводить вызовы log.debug на консоль, но с использованием grails 1.2.1 я не вижу никакого вывода.
Можно ли мне сообщить, как просмотреть выходные данные 'println' или 'log.debug' в консоли, чтобы ускорить мое развитие?
Ответы
Ответ 1
Добавьте переключатель -echoOut в тестовое приложение grails, это новое в версии 1.2:
grails test-app -echoOut
В тестовое приложение также есть ряд других полезных переключателей, включая:
echo Сообщения System.err:
grails test-app -echoErr
принудительно очистите перед запуском тесты (без использования grails clean && grails test-app):
grails test-app -clean
запускать только те тесты:
grails test-app unit:
выполняются только те тесты интеграции:
grails test-app integration:
выполняется в определенной среде:
grails -Dgrails.env=production test-app
запускать тесты только для определенного тестового класса (например, com.foo.MyControllerTests),
не забудьте оставить суффикс "Тесты":
grails test-app com.foo.MyController
повторить только те тесты, которые не выполнялись при последнем запуске тестов
grails test-app -rerun
Ответ 2
Чтобы просмотреть инструкции log.debug, вам нужно добавить следующее в раздел log4 файла grails-app/conf/Config.groovy:
log4j = {
...
...
...
debug 'grails.app'
}
Ответ 3
Одна вещь, которая может помочь вам, заключается в следующем:
Убедитесь, что ваш Config.groovy устанавливает log4j:
import grails.util.GrailsUtil
if (GrailsUtil.environment == 'test') {
log4j = {
appenders {
// %d{yyyyMMdd.HHmmss.SSS} %r [%t] %-5p %c %x - %m%n
console name:'a1', layout:pattern(conversionPattern: '%d{yyyyMMdd.HHmmss.SSS} %r [%t] %-5p %c %x - %m%n')
}
root {
info 'a1'
additivity = true
}
// debug 'org.springframework.security'
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',
'org.apache',
'grails.util.GrailsUtil',
'grails.app.service.NavigationService',
'org.quartz',
'net.sf.ehcache'
fatal 'NotificationJob'
warn 'org.mortbay.log',
'groovyx.net.ws', // Web services too noisy with INFO statements
'org.apache.cxf.endpoint.dynamic' // Web services too noisy with INFO statements
info 'org.springframework.security'
debug 'grails.app.controller.TroublesomeController'
}
}
В своем тесте сделайте следующее:
import org.slf4j.Logger
import org.slf4j.LoggerFactory
class HandoffTests extends GroovyTestCase {
Logger log = LoggerFactory.getLogger(HandoffTests)
... your tests ...
}
Если вы это сделаете, журнал будет вести себя примерно так же, как и в объектах домена, сервиса и контроллера, где Grails автоматически вводит его для вас. Я понятия не имею, почему они не автоматически вводят в тесты...
Ответ 4
Другой ответ о добавлении конфигурации log4j в Config.groovy важен
debug 'grails.app'
Но также убедитесь, что модули, которые вы тестируете, включили регистрацию.
Например, если вы видели какой-то сбой, например, из вашего теста
| Failure: write a GFF3 of a simple gene model(org.company.YourAppIntegrationSpec)
а журнал отладки не показывался, вам также может потребоваться добавить журнал для вашего пакета
debug 'org.company'