【问题标题】:How can I unit test a method that uses a Scanner and an InputStream?如何对使用 Scanner 和 InputStream 的方法进行单元测试?
【发布时间】:2015-05-11 04:50:53
【问题描述】:

代码如下:

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(){

}

【问题讨论】:

标签: java unit-testing inputstream fileinputstream


【解决方案1】:

您可以像这样将测试字符串作为 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));

【讨论】:

  • 如何让这个流返回 3?
  • @KorayTugay 添加了一个示例
  • @JBNizet 你是对的。我删除了自定义字符集。
  • 为什么要删除自定义字符集?
  • @KorayTugay 正如我在我的 - 现在已删除 - 评论中所说:代码使用默认字符集从流中读取。因此,如果这是正确的做法,则字符串也应该使用此默认字符集转换为字节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2010-09-17
相关资源
最近更新 更多