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
}
}
Это исправило их обоих.