我有从扫描程序扫描输入的方法:
private int chooseItem() throws IOException {
return inputoutput.inputValue();
}
public int inputValue() throws IOException {
Scanner scanner = new Scanner(System.in);
return scanner.nextInt();
}
正如您所见,它希望将int
作为传入值,如果我输入String
,则应该抛出InputMismatchEcxeption
。问题是如何在Java中我可以教inputValue返回smth而不是int,例如,字符串并检查异常被抛出的事实?换句话说要测试一下吗?
我试过了:
IO io = mock(IO.class);
when(io.inputValue()).thenReturn("fdas");
但是mockito只是说io.inputValue不能返回字符串。
答案 0 :(得分:2)
如果您想模拟测试中的输入,可以执行以下操作。
InputStream inputStream = new ByteArrayInputStream( "fdas".getBytes() );
System.setIn(inputStream);
并且在inputStream
对象中,您可以使它传递String而不是int。
答案 1 :(得分:1)
您可以将System.in
重定向到输入流以读取无效输入:
InputStream in = System.in;
System.setIn(new ByteArrayInputStream("fdas".getBytes()));
try {
// call inputValue method
} finally {
System.setIn(in); // restore old input stream
}
答案 2 :(得分:0)
最简单的方法是使用Mockitos thenThrow选项使得始终抛出InputMisMatchException。然后,您可以通过某种方法在自己的代码中测试对它的处理。
when(io.inputValue()).thenThrow(new InputMismatchException());