스프링 핵심 원리 - 고급편
콘솔 로그를 테스트하는 방법에 대해 알아봤습니다.
void 메서드는 어떻게 테스트해야할 지 고민해본 적은 있었는데, 콘솔 로그가 원하는대로 나오는지 테스트는 해본적이 없는 것 같습니다.
좋은 것 배워갑니다.
class LogTrackerV1Test {
@Test
void begin_end() throws Exception {
// given
ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
Logger logger = (Logger) LoggerFactory.getLogger(LogTrackerV1.class);
logger.addAppender(listAppender);
listAppender.start();
LogTrackerV1 tracker = new LogTrackerV1();
// when
TraceStatus status = tracker.begin("hello");
tracker.end(status);
// then
List<ILoggingEvent> testLogs = listAppender.list;
assertThat(testLogs).hasSize(2);
assertThat(testLogs.get(0).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello");
assertThat(testLogs.get(0).getLevel()).isEqualTo(Level.INFO);
assertThat(testLogs.get(1).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello\\stime=[0-9]*ms");
assertThat(testLogs.get(1).getLevel()).isEqualTo(Level.INFO);
}
@Test
void begin_exception() throws Exception {
// given
ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
Logger logger = (Logger) LoggerFactory.getLogger(LogTrackerV1.class);
logger.addAppender(listAppender);
listAppender.start();
LogTrackerV1 tracker = new LogTrackerV1();
// when
TraceStatus status = tracker.begin("hello");
tracker.exception(status, new IllegalArgumentException());
// then
List<ILoggingEvent> testLogs = listAppender.list;
assertThat(testLogs).hasSize(2);
assertThat(testLogs.get(0).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello");
assertThat(testLogs.get(0).getLevel()).isEqualTo(Level.INFO);
assertThat(testLogs.get(1).getFormattedMessage()).matches("\\[[a-z0-9]{1,8}\\]\\shello\\stime=[0-9]*ms ex=[a-zA-Z.]*");
assertThat(testLogs.get(1).getLevel()).isEqualTo(Level.INFO);
}
}