【发布时间】:2018-02-25 20:12:27
【问题描述】:
我正在用 Groovy 开发一个应用程序。
我正在使用有用的“AST”标签@Slf4j - 它为您的类添加了一个新属性log。我已将其配置为ch.qos.logback.classic.Logger。
现在我想测试(使用 Spock)是否记录了 error 级别的消息。注意start 方法调用loop 方法。这是受到this question的启发:
import org.slf4j.Logger
...
ConsoleHandler ch = Spy( ConsoleHandler )
ch.setMaxLoopCount 3
ch.loop() >> { throw new Throwable() }
ch.log = Mock( Logger )
when:
ch.start()
then:
1 * ch.log.error( 'dummy' )
失败了……
groovy.lang.MissingMethodException:没有方法签名: core.ConsoleHandler.setLog() 适用于参数类型: (ch.qos.logback.classic.Logger) 值:[Logger[null]] 可能 解决方案:stop()、setMode(java.lang.Object)、getMode()、 开始(javafx.stage.Stage),开始(javafx.stage.Stage), getAt(java.lang.String)
在你问之前,我也试过了:
ConsoleHandler ch = Spy( ConsoleHandler )
ch.setMaxLoopCount 3
ch.loop() >> { throw new Throwable() }
Logger mockLogger = Mock( Logger )
ch.getLog() >> mockLogger
when:
ch.start()
then:
1 * mockLogger.error( 'dummy' )
...这给出了“太少的调用”,尽管字符串“dummy”确实被记录为错误。在这一点上我的怀疑只是 log 不能被嘲笑,因为它是通过 Groovy AST 魔法添加的属性。
谁能想到解决办法?除了将日志消息转发到 AST log 的不优雅的包装类之外,可能还有其他?
【问题讨论】:
标签: logging gradle groovy abstract-syntax-tree