我在java中有下一个代码,我只是使用JUnit
来测试简单的事情和一些例外,但我怎样才能测试下一个函数:
public static void suma() {
Scanner scanner = new Scanner(System.in);
int primerSumando = scanner.nextInt();
int segundoSumando = scanner.nextInt();
System.out.print(primerSumando+segundoSumando);
}
答案 0 :(得分:0)
您可以通过替换默认输出打印流来实现此目的:
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private static PrintStream outBackup;
@BeforeClass
public static void backupOut() {
outBackup = System.out;
}
@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
}
@AfterClass
public static void cleanUpStreams() {
System.setOut(outBackup);
}
@Test
public void out() {
suma();
assertEquals("4", outContent.toString());
}
但请记住,您必须避免直接使用System.out。使用记录器或创建接收操作结果的接口。
答案 1 :(得分:-1)
硬编码的I / O将无法使用JUnit进行测试。可测试的版本是suma()将输入流和输出流作为参数。在真实程序中,您传入System.in和System.out。在JUnit中,您可以传入String或StringBuffer流,允许您的测试用例控制输入并检查输出。