使用JUnit

时间:2017-11-06 19:38:48

标签: java unit-testing junit

我正在使用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());
}

上面的代码给了我这个错误。

enter image description here

我尝试添加系统来修复这样的错误。

@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?

3 个答案:

答案 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");或类似的解决方案来在运行时获取正确的换行符。