Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 为什么日志对象的自动注入不总是在grails中工作?_Logging_Grails_Groovy_Log4j_Code Injection - Fatal编程技术网

Logging 为什么日志对象的自动注入不总是在grails中工作?

Logging 为什么日志对象的自动注入不总是在grails中工作?,logging,grails,groovy,log4j,code-injection,Logging,Grails,Groovy,Log4j,Code Injection,在grails框架中,一些对象正在使用日志。这通常由grails注入。它适用于执行grails测试应用程序。但是相同的测试(集成测试)在执行grailstest-app-integration时失败 这里出了什么问题,我可以以某种方式强制注入日志对象吗?您使用的是什么版本的grails?在1.0.4(最新版本)上,它在这两种情况下都可以正常工作 我创建了一个新的空白应用程序,并创建了一个带有集成测试的服务类: FooService.groovy: class FooService { d

在grails框架中,一些对象正在使用日志。这通常由grails注入。它适用于执行
grails测试应用程序
。但是相同的测试(集成测试)在执行
grailstest-app-integration
时失败


这里出了什么问题,我可以以某种方式强制注入日志对象吗?

您使用的是什么版本的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")
    }
}
运行just 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上的任何元类内容,然后不重新初始化元类?

我刚刚遇到了这个确切的问题,通过调用mockLogging功能可以很容易地解决这个问题:

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

(使用Grails1.1.1,如果有必要的话)

我使用的是1.3.2,登录测试运行良好。
只需确保您已经为测试环境指定了log4j配置。

您的注入服务会话或请求的作用域是否已确定?在这种情况下,我可以看到一个测试用例没有得到它(尽管您应该看到一条很好的异常消息)。我们使用Grails 1.0.3,但下次将切换到1.0.4。我会看看更新是否会改变。请注意:如果您有安装方法,则需要调用super.setUp(),如果您还没有