扩展 Log4j2 测试

问题描述

我有一个 log4j2 Logger 类的包装器 - 例如

import org.apache.logging.log4j.core.Logger;
       
public class MyLogger extends Logger {
    protected MyLogger(LoggerContext context,String name,MessageFactory messageFactory) {
        super(context,name,messageFactory);
    }

    ....
    
}

我正在尝试扩展 LoggerTest 类以验证 MyLogger 功能(以便我可以运行包含的测试并添加新的测试)。我尝试过类似以下内容

@SpringBoottest
@LoggerContextSource(
    value = "log4j-test2.xml",reconfigure = ReconfigurationPolicy.AFTER_EACH
)
public class MyLoggerTest extends LoggerTest {
    public MyLoggerTest(LoggerContext context,ListAppender app,ListAppender host,ListAppender noThrown) {
        super(context,app,host,noThrown);
    }
}

org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [org.apache.logging.log4j.test.appender.ListAppender arg1] in constructor....

我尝试创建 @LoggerContextSource 的本地实现及其引用的属性解析器/扩展类 (@Extensions({@ExtendWith({LoggerContextResolver.class}),@ExtendWith({ConfigurationResolver.class}),@ExtendWith({AppenderResolver.class})})) 并引用它们 例如

@MyLoggerContextSource(
    value = "log4j-test2.xml",reconfigure = ReconfigurationPolicy.AFTER_EACH
)
...
@Extensions({
   @ExtendWith({MyLoggerContextResolver.class}),@ExtendWith({MyConfigurationResolver.class}),@ExtendWith({MyAppenderResolver.class})
})
public @interface MyLoggerContextSource {
...
}

但是对于 Duplicate ParameterResolver...LoggerContextResolver

出现 MyLoggerContextResolver 错误

无论如何我可以扩展 log4j2 测试吗?

解决方法

感谢@rgoers,结果我遗漏了参数上的 @Named 注释。

所以我的 MyLoggerTest 使用以下内容:

@SpringBootTest
@LoggerContextSource(
    value = "log4j-test2.xml",reconfigure = ReconfigurationPolicy.AFTER_EACH
)
public class MyLoggerTest extends LoggerTest {
    public MyLoggerTest(final LoggerContext context,@Named("List") final ListAppender app,@Named("HostTest") final ListAppender host,@Named("NoThrowable") final ListAppender noThrown) {
        super(context,app,host,noThrown);
    }
}