关于java:如何对使用Scanner和InputStream的方法进行单元测试?

How can I unit test a method that uses a Scanner and an InputStream?

下面是代码:

1
2
3
4
5
6
7
8
9
public int foo(InputStream in) {
    int counter = 0;
    Scanner scanner = new Scanner(in);
    while(scanner.hasNextLine()) {
        counter++;
        scanner.nextLine();
    }
    return counter;
}

通常我会将一个fileinputstream传递给这个方法,但是我希望能够在不访问物理文件的情况下测试它。

我应该嘲笑文件对象吗?如何实施

1
2
3
4
@Test
public void shouldReturnThree(){

}


您可以像这样将测试字符串作为输入流传递到方法中(:

1
InputStream stream = new ByteArrayInputStream(exampleString.getBytes());

(不知羞耻地从这个答案中偷走了)

例如,此代码将打印3:

1
2
3
4
5
6
String str ="


"
;
InputStream stream = new ByteArrayInputStream(str.getBytes());
System.out.println(foo(stream));