我有一个方法,它在内部调用一个名为"burn“的方法,该方法抛出一个数据异常,如果是这样的话,它将被一个try/catch块捕获并记录到一个记录器中。然而,该类使用的是注释@Slf4j和lombok.extern.slf4j:
@Slf4j public class MyClass { private void myMethod(Type parameter) throws Exception { try { dataGateway.burn(id); catch { log.error("Failed to burn({})",id); }
我已经模拟了数据网关,并让它在调用burn时抛出异常,我知道异常被捕获了,但是我如何使用verify来断言记录器是通过.error调用的?DateGateway dBMock = mock(DateGateway.class);
when(dBMock.burn(anyString())).thenReturn(new DataException("exception"));
发布于 2020-10-19 21:09:18
我在这里找到了一个很好的解决方案: https://www.jvt.me/posts/2019/09/22/testing-slf4j-logs/
解决方案是将日志附加器添加到要测试的类中,然后从该附加器读取已记录的内容。
下面是为特定类添加和返回附加器的通用方法:
private ListAppender<ILoggingEvent> getListAppenderForClass(Class clazz) { Logger logger = (Logger) LoggerFactory.getLogger(clazz); ListAppender<ILoggingEvent> loggingEventListAppender = new ListAppender<>(); loggingEventListAppender.start();