Почему автоматическая инъекция log-объекта не всегда работает в Grails? - PullRequest
4 голосов
/ 19 ноября 2008

В grails-framework некоторые объекты используют log. Это обычно вводится Граалем. Работает на исполнение grails test-app. Но тот же тест (интеграционный тест) не выполняется при выполнении grails test-app -integration.

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

Ответы [ 3 ]

3 голосов
/ 20 ноября 2008

Какую версию грааля вы используете? На 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")
    }
}

При запуске только test-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
-------------------------------------------------------
....

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

1 голос
/ 10 октября 2009

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

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

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

0 голосов
/ 11 августа 2010

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

...