首页 > 解决方案 > junit主要方法测试失败

问题描述

尽管我找不到原因,但我的 JUnit 主要方法测试给了我错误。我只在 3 个边满足三角形标准时才实施。预期输出和实际输出不匹配。但是在代码中输入和输出是相同的。

主要方法:

public class Demo {

    public static void main(String[] args) {
        // Reading from System.in
        Scanner reader = new Scanner(System.in);

        System.out.println("Enter side 1: ");
        // Scans the next token of the input as an int.
        int side_1 = reader.nextInt();

        System.out.println("Enter side 2: ");
        // Scans the next token of the input as an int.
        int side_2 = reader.nextInt();

        System.out.println("Enter side 3: ");
        // Scans the next token of the input as an int.
        int side_3 = reader.nextInt();

        if (isTriangle(side_1, side_2, side_3)) {
            System.out.println("This is a triangle.");
        }
        else {
            System.out.println("This is not a triangle.");
        }

        reader.close();

    }
}

junit test_main_program:

@Test
public void test_main_program() {
    ByteArrayInputStream in=new ByteArrayInputStream("5\n6\n9\n".getBytes());
    System.setIn(in);
    ByteArrayOutputStream out=new ByteArrayOutputStream();
    System.setOut(new PrintStream(out));
    //invoke
    String[] args= {};
    Demo.main(args);

    String consoleOutput="Enter side 1:\n";
    consoleOutput+="Enter side 2: \n";
    consoleOutput+="Enter side 3:\n";
    consoleOutput+="This is a triangle.\n" ;

    assertEquals(consoleOutput,out.toString());

}

标签: javatestingjunit

解决方案


尝试使用这个:

    private static PrintStream orgPrintStream;
    private static InputStream orgInputStream;

    @BeforeClass
    public static void beforeClass() {
        orgPrintStream = System.out;
        orgInputStream = System.in;
    }

    @AfterClass
    public static void afterClass() {
        System.setOut(orgPrintStream);
        System.setIn(orgInputStream);
    }

    @Test
    public void test_main_program() {
        ByteArrayInputStream in = new ByteArrayInputStream("5\n6\n9\n".getBytes());
        System.setIn(in);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        PrintStream printStream = new PrintStream(out);
        System.setOut(printStream);
        // invoke
        String[] args = {};
        Demo.main(args);

        String consoleOutput = "Enter side 1: " + System.lineSeparator();
        consoleOutput += "Enter side 2: " + System.lineSeparator();
        consoleOutput += "Enter side 3: " + System.lineSeparator();
        consoleOutput += "This is a triangle." + System.lineSeparator();

        assertEquals(consoleOutput, printStream.toString());
    }

推荐阅读