我正在使用Netbeans中的JUnit学习单元测试。但我知道JUnit如何工作以及如何测试System.out.print - JUnit test for System.out.println()。我是JUnit的新手,因为我今天刚刚开始使用JUnit。
这是我的测试类
public class CDTest {
CD cd;
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
public CDTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent));
}
@After
public void tearDown() {
System.setOut(null);
System.setErr(null);
}
@Test
public void testSystemOutPrint(){
System.out.print("hello");
System.out.print("hello again");//Please pay attention here. Just System.out.print()
assertEquals("hellohello again", outContent.toString());
}
}
当我运行测试时,它正在成功运行。现在我只测试System.out.print。但是当我测试System.out.println()时如下
@Test
public void testSystemOutPrint(){
System.out.print("hello");
System.out.println("hello again"); //Please pay attention here for println()
assertEquals("hellohello again", outContent.toString());
}
上面的代码给了我这个错误。
我尝试添加系统来修复这样的错误。
@Test
public void testSystemOutPrint(){
System.out.print("hello");
System.out.println("hello again"); //Please pay attention here for println()
assertEquals("hellohello again ", outContent.toString());//Please pay attention to the space after "again"
}
如上所述,我在“再次”之后添加了一个空格。我跑的时候仍然给我错误。我也试过这个
assertEquals("hellohello again\n", outContent.toString());
如何测试System.out.println而不是System.out.print?
答案 0 :(得分:3)
试试这个
String expected = "hellohello again " + System.getProperty("line.separator");
assertEquals(expected, outContent.toString());
答案 1 :(得分:0)
System.out.println
打印一个新行。更改:"hellohello again"
到
"hellohello again" + System.lineSeparator()
答案 2 :(得分:0)
我还没有运行此功能,但我怀疑System.out.println
正在"hellohello again"
末尾添加换行符。所以你的严格平等可能就是失败了。
您可能需要考虑将断言更改为
assertTrue(outContent.toString().startsWith("hellohello again"));
或者在您期望的String的末尾添加换行符。这可能很棘手,因为它会根据运行测试的系统而改变。因此,您可能需要System.getProperty("line.separator");
或类似的解决方案来在运行时获取正确的换行符。