扩展 Log4j2 测试
Extend Log4j2 Tests
我有一个 log4j2 记录器的包装器 class - 例如
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 class 以验证 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
和 属性 resolver/extensions class 的本地实现,它引用 (@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 {
...
}
但 LoggerContextResolver
和 MyLoggerContextResolver
出现 Duplicate ParameterResolver...
错误
我是否可以扩展 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);
}
}
我有一个 log4j2 记录器的包装器 class - 例如
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 class 以验证 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
和 属性 resolver/extensions class 的本地实现,它引用 (@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 {
...
}
但 LoggerContextResolver
和 MyLoggerContextResolver
Duplicate ParameterResolver...
错误
我是否可以扩展 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);
}
}