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

时间:2015-03-09 21:25:53

标签: java unit-testing inputstream fileinputstream

所以这是代码:

public int foo(InputStream in) {
    int counter = 0;
    Scanner scanner = new Scanner(in);
    while(scanner.hasNextLine()) {
        counter++;
        scanner.nextLine();
    }
    return counter;
}

通常我会将FileInputStream传递给此方法,但是我希望能够在不访问物理文件的情况下对其进行测试。

我应该模拟File对象吗?如何实施

@Test
public void shouldReturnThree(){

}

1 个答案:

答案 0 :(得分:4)

您可以将测试字符串作为InputStream传递给方法,如下所示(:

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

(从this answer无耻地偷走)

例如,此代码将打印3:

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