【发布时间】:2014-12-11 23:18:31
【问题描述】:
我正在尝试使用 JUnit 测试另一个程序的控制台输出。我遵循了here中给出的答案
这是我的 JUnit 类
import static org.junit.Assert.*;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.junit.*;
public class MainTest {
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
@Before
public void setup() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent));
}
@Test
public void test01_initTest() {
String[] arguments = {"a", "b"};
Main.main(arguments);
String expected = "hello";
assertTrue(expected == outContent.toString());
}
@After
public void cleanUpStreams() {
System.setOut(null);
System.setErr(null);
}
}
当我在 eclipse 中运行这个程序时,我也看不到控制台输出并且测试运行没有结束。但是,如果我直接从 test01_initTest() 在控制台上打印输出,则测试通过。要检查 Main.main() 是否正在打印,我还尝试了以下代码,在这种情况下我确实看到了控制台输出
import static org.junit.Assert.*;
import org.junit.*;
public class MainTest {
@Test
public void test01_initTest() {
String[] arguments = {"a", "b"};
Main.main(arguments);
}
}
我厌倦了很多事情,但我无法弄清楚我在这里做错了什么。谁能帮帮我。
【问题讨论】:
-
你为什么使用assertTrue?使用 AssertEquals(expected, outContent.toString())。
==没有做你认为的事情。 -
您好 Falmarri,我也试过了,但结果是一样的。我在控制台上看不到任何输出,并且测试运行没有结束
-
我们必须看到
Main的代码。您不会在 Main 中调用 System.exit() 吗? -
等等,你为什么期待控制台输出?您正在将 stdout 和 stderr 设置为其他流。
-
嘿 dkatzel,是的,我在我的程序中使用 System.exit()。是这个问题吗?