JUnit-如何测试接受用户输入并相应打印结果的主方法



我有一个计算器,它接受输入并打印结果。例如:扫描仪输入:

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());
}
}

如果将职责分开,测试会容易得多。例如,计算结果的部分不应与读取输入和打印输出的部分相同。如果Operator有一个方法compute,它接受一个带有输入("2+3+4"(的String,并返回一个带有结果("9.00"(的字符串。然后可以测试这个方法是否返回预期结果。然后,您的main方法将读取输入并将其传递给compute并打印结果。

大致如下:

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

最新更新