JUnit - 如何测试接受用户输入并相应地打印结果的主要方法?
JUnit - How to test the main method that takes a user input and prints a result accordingly?
我有一个接受输入并打印结果的计算器。例如:
输入扫描仪:
2+3+4=
打印:
9.00
我想在 JUnit 中测试这个主要方法。这是我到目前为止的进展(运算符是 class):
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”)的字符串和 returns 一个带有结果(“9.00”)的字符串。然后你可以测试这个方法 returns 预期的结果。然后,您的 main
方法将读取输入并将其传递给 compute
并打印结果。
大致如下:
String result = operator.compute("2+3+4");
assertEquals(result, "9.00");
我有一个接受输入并打印结果的计算器。例如: 输入扫描仪:
2+3+4=
打印:
9.00
我想在 JUnit 中测试这个主要方法。这是我到目前为止的进展(运算符是 class):
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”)的字符串和 returns 一个带有结果(“9.00”)的字符串。然后你可以测试这个方法 returns 预期的结果。然后,您的 main
方法将读取输入并将其传递给 compute
并打印结果。
大致如下:
String result = operator.compute("2+3+4");
assertEquals(result, "9.00");