我对Mocking Framework Mockito有问题。我想测试用户在控制台中键入的输入。没有Mocking,它的效果很好,但是有了它,我不知道如何从函数中获取返回值,该函数获取控制台中的输入。
没有Mockito:
读取输入法
public int readUserInput() {
BufferedReader console = new BufferedReader(new InputStreamReader(
System.in));
return Integer.parseInt(console.readLine());
...
}
测试方法:
public class TestClass {
Controller contr = new Controller();
@Test
public void testUserInput() {
System.setIn(new ByteArrayInputStream("1".getBytes()));
assertEquals(1, contr.readUserInput());
System.setIn(System.in);
}
}
但是现在如何用Mockito编写测试。我尝试了几种方法,但没有一种起作用。我一直都得到0,而不是我在
ByteArrayInputStream
中写的数字。提前致谢!
最佳答案
您需要模拟BufferedReader
的readLine()
API以返回您的值。
即
Mockito.when(mockedBufferedReader.readLine())
.thenReturn("1");
现在,当您从Test调用readInput()时,将调用模拟的缓冲读取器的API,希望这可以回答您的问题。
关于java - JUnit使用Mockito测试用户输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27105951/