groovy – 与Spock嘲笑slf4j
发布时间:2020-12-14 16:27:46 所属栏目:大数据 来源:网络整理
导读:我有一个用@ Slf4j注释的Groovy类,所以它得到一个私有的最终Logger日志字段,我想测试它的用法.我想继续使用@ Slf4j并且不再公开日志字段以启用测试. 我正在使用Spock 1.0编写测试,并尝试使用Spock的集成模拟和存根功能来完成此操作.全局存根应该帮助我拦截Lo
我有一个用@ Slf4j注释的Groovy类,所以它得到一个私有的最终Logger日志字段,我想测试它的用法.我想继续使用@ Slf4j并且不再公开日志字段以启用测试.
我正在使用Spock 1.0编写测试,并尝试使用Spock的集成模拟和存根功能来完成此操作.全局存根应该帮助我拦截LoggerFactory调用以获取实际的Logger实例,所以我目前的猜测是这样的: LoggerFactory logFactory = GroovyStub(global: true) logFactory.getLogger(_) >> Mock(Logger) // create my @Slf4j-annotated object afterwards 有趣的是,拦截实际上是有效的,println确认该类实际上获得了一个名为’dummy’的类型’Logger’的对象Mock,但指示存根返回模拟的第二个语句似乎没有捕获.相反,默认存根行为返回另一个存根,当然不能用于模拟: org.spockframework.runtime.InvalidSpecException: Stub 'dummy' matches the following required interaction: 1 * plugin.log.warn(_) (0 invocations) Remove the cardinality (e.g. '1 *'),or turn the stub into a mock. 我需要更改什么才能让存根的LoggerFactory返回模拟Logger? 解决方法
您需要使用反射设置私有最终日志字段,如下所述:
Unit testing of a class with StaticLoggerBinder
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |