gpt4 book ai didi

logging - 使用mockito在java服务中模拟静态记录器的策略是什么

转载 作者:行者123 更新时间:2023-12-04 15:23:09 25 4
gpt4 key购买 nike

我看到在 Powermock 或某种需要记录器的覆盖构造函数的帮助下,记录器被 mock 。

在整个代码中使用记录器,难道他们不是只使用 mockito 的简单方法吗?某种忽略调用或模拟它的方法 - 我不想验证任何消息,只想避免空指针异常

我是模拟框架的新手,所以我想知道宁可使用 Jmockit 而不是混合和匹配两个库——到目前为止避免 jomockit 的唯一原因——它太强大了,很容易被滥用!

最佳答案

在我认为在某个级别登录非常重要的情况下,我会使用日志验证。这就是我使用 Mockito 的方式:

实用类

public final class LoggingTestUtil {

private LoggingTestUtil() {
}

public static void setupLoggingMock(Logger logger, Appender<ILoggingEvent> appender) {
logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
when(appender.getName()).thenReturn("MOCK");
logger.addAppender(appender);
}

public static void verifyLogAppended(Appender<ILoggingEvent> appender, final String loggedString) {
verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() {
@Override
public boolean matches(final Object argument) {
return ((LoggingEvent) argument).getMessage().contains(loggedString);
}
}));
}

public static void verifyLogAppendedAtLevel(Appender<ILoggingEvent> appender, final Level level) {
verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() {
@Override
public boolean matches(final Object argument) {
return ((LoggingEvent) argument).getLevel().equals(level);
}
}));
}

public static void verifyLogAppendedAtLevel(Appender<ILoggingEvent> appender, final Level level, final String loggedString) {
verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() {
@Override
public boolean matches(final Object argument) {
LoggingEvent event = (LoggingEvent) argument;
return event.getLevel().equals(level) && event.getMessage().contains(loggedString);
}
}));
}
}

在测试类
private static Logger root;
@Mock
private static Appender<ILoggingEvent> mockAppender; // used to test that logging occurs

@Test
public final void testSomething(){
LoggingTestUtil.setupLoggingMocks(root, mockAppender);
underTest.doSomethingBad();
LoggingTestUtil.verifyLogAppendedAtLevel(mockAppender, Level.ERROR, "bad thing");
}

关于logging - 使用mockito在java服务中模拟静态记录器的策略是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com