我必须测试类中的一个方法,该方法使用 Scanner 类接受输入。
package com.math.calculator;
import java.util.Scanner;
public class InputOutput {
public String getInput() {
Scanner sc = new Scanner(System.in);
return sc.nextLine();
}
}
我想使用 JUnit 测试它,但不知道该怎么做。
我尝试使用以下代码,但它不起作用。
package com.math.calculator;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class InputOutputTest {
@Test
public void shouldTakeUserInput() {
InputOutput inputOutput= new InputOutput();
assertEquals("add 5", inputOutput.getInput());
}
}
我也想用 Mockito 尝试一下(使用mock...when...thenReturn),但不知道该怎么做。
您可以更改System.in
流式使用System.setIn()
method.
尝试这个,
@Test
public void shouldTakeUserInput() {
InputOutput inputOutput= new InputOutput();
String input = "add 5";
InputStream in = new ByteArrayInputStream(input.getBytes());
System.setIn(in);
assertEquals("add 5", inputOutput.getInput());
}
您刚刚修改了System.in
field. System.in
基本上是一个InputStream
其读取自console
(因此您在控制台中的输入)。但你只是修改了它并让系统从提供的读取inputstream
反而。因此它不再从控制台读取,而是从提供的输入流读取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)