|
1 | 1 | package org.example.filter; |
2 | 2 |
|
| 3 | +import ch.qos.logback.classic.spi.ILoggingEvent; |
| 4 | +import ch.qos.logback.core.read.ListAppender; |
3 | 5 | import org.example.http.HttpResponseBuilder; |
4 | 6 | import org.example.httpparser.HttpRequest; |
5 | | -import org.junit.jupiter.api.AfterEach; |
6 | 7 | import org.junit.jupiter.api.BeforeEach; |
7 | 8 | import org.junit.jupiter.api.Test; |
8 | 9 | import org.junit.jupiter.api.extension.ExtendWith; |
9 | | -import org.mockito.ArgumentCaptor; |
10 | 10 | import org.mockito.Mock; |
11 | 11 | import org.mockito.junit.jupiter.MockitoExtension; |
| 12 | +import ch.qos.logback.classic.Logger; |
| 13 | +import org.slf4j.LoggerFactory; |
12 | 14 |
|
13 | | -import java.util.logging.Handler; |
14 | | -import java.util.logging.LogRecord; |
15 | | -import java.util.logging.Logger; |
| 15 | +import java.util.List; |
16 | 16 |
|
17 | 17 | import static org.assertj.core.api.Assertions.assertThat; |
18 | 18 | import static org.mockito.Mockito.*; |
19 | 19 |
|
20 | 20 | @ExtendWith(MockitoExtension.class) |
21 | 21 | class LoggingFilterTest { |
22 | 22 |
|
23 | | - @Mock Handler handler; |
24 | 23 | @Mock HttpRequest request; |
25 | 24 | @Mock HttpResponseBuilder response; |
26 | 25 | @Mock FilterChain chain; |
27 | 26 |
|
28 | 27 | LoggingFilter filter = new LoggingFilter(); |
29 | | - Logger logger; |
| 28 | + ListAppender<ILoggingEvent> appender; |
30 | 29 |
|
31 | 30 | @BeforeEach |
32 | 31 | void setup(){ |
33 | | - logger = Logger.getLogger(LoggingFilter.class.getName()); |
34 | | - logger.addHandler(handler); |
| 32 | + Logger logger = (Logger) LoggerFactory.getLogger(LoggingFilter.class); |
| 33 | + |
| 34 | + appender = new ListAppender<>(); |
| 35 | + appender.start(); |
| 36 | + |
| 37 | + logger.addAppender(appender); |
35 | 38 |
|
36 | 39 | when(request.getMethod()).thenReturn("GET"); |
37 | 40 | when(request.getPath()).thenReturn("/index.html"); |
38 | 41 | } |
39 | 42 |
|
40 | | - @AfterEach |
41 | | - void tearDown(){ |
42 | | - logger.removeHandler(handler); |
43 | | - } |
44 | | - |
45 | 43 | @Test |
46 | 44 | void loggingWorksWhenChainWorks(){ |
47 | 45 | when(response.getStatusCode()).thenReturn(HttpResponseBuilder.SC_OK); |
@@ -79,11 +77,10 @@ void statusChangesFrom200To500WhenErrorOccurs(){ |
79 | 77 | } |
80 | 78 |
|
81 | 79 | private void verifyLogContent(String expectedMessage){ |
82 | | - //Use ArgumentCaptor to capture the actual message in the log |
83 | | - ArgumentCaptor<LogRecord> logCaptor = ArgumentCaptor.forClass(LogRecord.class); |
84 | | - verify(handler).publish(logCaptor.capture()); |
| 80 | + List<ILoggingEvent> logs = appender.list; |
85 | 81 |
|
86 | | - String message = logCaptor.getValue().getMessage(); |
| 82 | + assertThat(logs).isNotEmpty(); |
| 83 | + String message = logs.getFirst().getFormattedMessage(); |
87 | 84 |
|
88 | 85 | assertThat(message).contains(expectedMessage); |
89 | 86 | } |
|
0 commit comments