簡體   English   中英

mvn test + JUnit5 + log4j:為什么在@BeforeAll 和@BeforeEach 中打印的日志不是 output 到控制台?

[英]mvn test + JUnit5 + log4j: Why logs printed in @BeforeAll and @BeforeEach are not output to console?

我創建了一個簡單的 maven 項目來描述我的問題

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>NoLog</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.9.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.19.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.19.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-jcl</artifactId>
      <version>2.19.0</version>
    </dependency>
  </dependencies>
</project>

我的測試 class 代碼

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class TestDemo {

  static Logger log = LogManager.getLogger(TestDemo.class);
  @BeforeAll
  public static void setupClass() {
    log.info("BeforeAll 111 from log.info");
    System.out.println("BeforeAll 111 from print");
    log.info("BeforeAll 222 from log.info");
    System.out.println("BeforeAll 222 from print");
  }

  @BeforeEach
  public void setup() {
    log.info("BeforeEach 111 from log.info");
    System.out.println("BeforeEach 111 from print");
    log.info("BeforeEach 222 from log.info");
    System.out.println("BeforeEach 222 from print");
  }

  @Test
  public void test1() {
    log.info("test1 111 from log.info");
    System.out.println("test 111 from print");
    log.info("test1 222 from log.info");
    System.out.println("test 222 from print");
  }
}

和 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="LogToConsole" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="LogToConsole"/>
    </Root>
    <Logger name="com.hexagon" level="debug" additivity="false">
      <AppenderRef ref="LogToConsole"/>
    </Logger>
  </Loggers>
</Configuration>

我的問題是,當我使用mvn test運行它時,我只能看到來自@Test function 的日志,而看不到來自@BeforeAll 和@BeforeEach 的日志,為什么以及如何啟用它?

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestDemo
2023-01-05 09:28:03 [main] INFO  TestDemo:29 - test1 111 from log.info
test 111 from print
2023-01-05 09:28:03 [main] INFO  TestDemo:31 - test1 222 from log.info
test 222 from print
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

由於 surefire 插件,方法 BeforeAll 和 BeforeEach 沒有被執行。 您應該至少使用 maven-surefire-plugin#3.0.0-M1。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-report-plugin</artifactId>
  <version>3.0.0-M1</version>
</plugin>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM