System.out.print() ничего не показывает в методах тестирования

Я пытаюсь напечатать некоторые данные с помощью System.out в моих модульных тестах (@Test mehotds), но ничего не показывает. Однако он корректно работает в методе @Before. Я использую JUnit с плагином Maven Surefire.

public class MyTests {

  @Before
  void init(){

    System.out.println("Initializing some data..."); // <- It works.

  }

  @Test
  void shouldRemoveSeries() {

    System.out.println("TEST: Should remove series"); // <- It doesn't.

  }
}

maven-surefire-plugin Конфигурация:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.15</version>
  <configuration>
    <includes>
      <include>**/*Tests.java</include>
    </includes>
  </configuration>
</plugin>

Спасибо.

Ответ 1

Используйте Log

private static Logger log = Logger.getLogger(LoggingObject.class);
log.info("I'm starting");

или System.setOut()

private final PrintStream stdout = System.out;
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
private TerminalView terminalview;

Ответ 2

В этом тоже. Я использую gradle для управления моими задачами, и я помещаю это в конец файла build.gradle:

test {
  testLogging.showStandardStreams = true
}

Теперь я вижу System.out.println(whateves).

Ответ 3

Чтобы получить выходные данные ваших письменных тестов через System.out.println, вам необходимо настроить maven-surefire-plugin, чтобы перенаправить этот вывод в файл, который может быть достигнут, используя следующее:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.18.1</version>
  <configuration>
    <redirectTestOutputToFile>true</redirectTestOutputToFile>
  </configuration>
</plugin>

Опция redirectTestOutputToFile перенаправляет вывод System.out.println и т.д. в файл, который создается отдельно:

Выдержка из документов:

Установите для этого параметра значение "true", чтобы перенаправить стандартный вывод unit test в файл (найдено в reportsDirectory/testName-output.txt).

Кроме того, System.out.println не имеет смысла в unit test вообще.

Ответ 4

Проблема заключается в имени вашего тестового класса. Чтобы быть распознанным на этапе тестирования внутри сборки (с помощью плагина Maven surefire), его нужно называть "* Test":

Включения и исключения тестов

Ответ 5

Этот звук мне знакомы, поэтому я предполагаю, что вы проводите тесты с некоторых IDE (Netbeans?). Возможно, он показывает только выходные данные для тестов, которые терпят неудачу. Это также происходит при запуске теста с консоли?

У вас может быть больше удачи, используя System.err вместо System.out, но я не уверен в этом.

Ответ 6

Я сделал маленький трюк в отдельном не тестовом классе. Это не так гладко, как регистратор, но если вы ищете быстрое решение в Spring Boot, вы можете использовать это.

PrintForTest.java

import org.springframework.stereotype.Controller;

@Controller
public class PrintForTest {

    public static void print(String input){
        System.out.println(input);
    }
}

MainTest.java

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.Assert;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class MainTest {

...

    @Test
    public void testingSomething(){
        PrintForTest.print("My new System.out.print()");
        Assert.assertEquals(...);
    }
}

отредактировано: с использованием статического метода, не нужно использовать @Autowired.

Ответ 7

Я использую gradle. У меня была эта проблема с System.out и java.util.logging.Logger. Я отредактировал следующую часть моего файла build.gradle:

test {
  testLogging {
    exceptionFormat = 'full'
    events = ["passed", "failed", "skipped"]
  }
}

и добавил showStandardStreams = true под testLogging. Результат был следующим:

test {
  testLogging {
    exceptionFormat = 'full'
    events = ["passed", "failed", "skipped"]
    showStandardStreams = true
  }
}

Это исправило их обоих.