我正在尝试在我的单元测试中使用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>
感谢。
答案 0 :(得分:30)
也进入这个。我使用gradle来管理我的任务,并将其放在build.gradle
文件的末尾:
test {
testLogging.showStandardStreams = true
}
现在我看到System.out.println(whateves)
。
答案 1 :(得分:9)
要通过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等的输出重定向到单独创建的文件中:
摘自文档:
将此设置为&#34; true&#34;将单元测试标准输出重定向到文件 (可在reportsDirectory / testName-output.txt中找到)。
除此之外,System.out.println在一般的单元测试中没有意义。
答案 2 :(得分:4)
使用Log
private static Logger log = Logger.getLogger(LoggingObject.class);
log.info("I'm starting");
private final PrintStream stdout = System.out;
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
private TerminalView terminalview;
答案 3 :(得分:2)
问题是测试类的名称。要在构建中的测试阶段(通过Maven surefire插件)进行识别,必须将其命名为&#34; * Test&#34;:
答案 4 :(得分:1)
这听起来很熟悉,所以我假设您从某些IDE(Netbeans?)运行测试。可能是它只显示失败的测试的输出。从控制台运行测试时是否也会出现这种情况?
使用System.err
代替System.out
可能会有更多运气,但我对此并不确定。
答案 5 :(得分:1)
我在单独的非测试类中制作了一个小技巧。它不像logger那么顺利,但是如果你在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。
答案 6 :(得分:0)
我正在使用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
}
}
它固定了两个。
答案 7 :(得分:0)
Maven的-Dtest=*
命令行选项似乎触发了单元测试中stdout的显示。
按照惯例,标准输出显示在target/surefire-reports/*-output.txt
中。显然,Surefire插件开发人员无法将stdout用于测试和框架之间的许多通信。