How to intercept SLF4J (with logback) logging via a JUnit test?

后端 未结 8 945
天涯浪人
天涯浪人 2020-12-04 10:52

Is it possible to somehow intercept the logging (SLF4J + logback) and get an InputStream (or something else that is readable) via a JUnit test case...?

8条回答
  •  广开言路
    2020-12-04 11:41

    With JUnit5 + AssertJ

    private ListAppender logWatcher;
    
    @BeforeEach
    void setup() {
      this.logWatcher = new ListAppender<>();
      this.logWatcher.start();
      ((Logger) LoggerFactory.getLogger(MyClass.class)).addAppender(this.logWatcher);
    }
    
    
    @Test
    void myMethod_logs2Messages() {
    
      ...
      int logSize = logWatcher.list.size();
      assertThat(logWatcher.list.get(logSize - 2).getFormattedMessage()).contains("EXPECTED MSG 1");
      assertThat(logWatcher.list.get(logSize - 1).getFormattedMessage()).contains("EXPECTED MSG 2");
    }
    

    credits to: @davidxxx's answer. See it for import ch.qos.logback... details: https://stackoverflow.com/a/52229629/601844

提交回复
热议问题