问题描述
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);
}
}