junit—如何测试接收用户输入并相应打印结果的主方法?

1cosmwyk  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(255)

我有一个计算器,可以输入并打印结果。例如:输入到扫描仪:2+3+4=打印:9.00
我想在junit中测试这个主要方法。这是我到目前为止的成绩(接线员是班级):

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintStream;

import org.junit.Before;
import org.junit.jupiter.api.Test;

class MainTester {

    private final ByteArrayOutputStream resultByte = new ByteArrayOutputStream();
    private final PrintStream result = System.out;

    @Before
    public void setUp() {
        System.setOut(new PrintStream(resultByte));
    }

    @Test
    void test() {
        Operator operator = new Operator();

        String input = "2+3+4=";
        InputStream in = new ByteArrayInputStream(input.getBytes());
        System.setIn(in);

        String[] args = null;       
        System.out.println(operator.main(args));
        assertEquals("9.00", resultByte.toString());

    }
}
nkhmeac6

nkhmeac61#

如果你把责任分开,测试就容易多了。e、 g.计算结果的部分不应与读取输入和打印输出的部分相同。如果 Operator 我有办法 compute ,它接受带有输入的字符串(“2+3+4”),并返回带有结果的字符串(“9.00”)。然后可以测试此方法是否返回预期结果。你的 main 方法将读取输入并将其传递给 compute 并打印结果。
大致如下:

String result = operator.compute("2+3+4");
assertEquals(result, "9.00");

相关问题