gpt4 book ai didi

Java I/O - 模拟 System.console() 的输入

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:24 25 4
gpt4 key购买 nike

我正在为练习中创建的程序编写 JUnit。这意味着测试需要覆盖尽可能多的案例,我对程序中某些事情的实现方式没有任何影响。此外,该程序会运行一个无限循环,在某个时刻,它需要用户输入一些内容。
对于 JUnit 测试,我在另一个 Thread 中运行程序,并在 JUnit Thread 中模拟用户输入。

到目前为止,如果程序从 System.in 读取用户输入,一切正常,因为这个流很容易被替换。但也有可能程序与 System.console() 交互,目前我的测试无法涵盖。

是否有可能为 System.console() 模拟输入,例如通过用另一个流替换其输入源?

(注意:JUnit 测试必须使用没有任何外部库(JUnit 和 Hamcrest 除外)的 Java 6。)

编辑:不幸的是,我无法更改要测试的程序的类。

最佳答案

在查看 JDK 源代码后,我发现 Console 类正在从标准输入 (System.in) 读取数据:

reader = new LineReader(StreamDecoder.forInputStreamReader(new FileInputStream(FileDescriptor.in), readLock, cs));

其中 FileDescriptor.in 是一个常量,指向真正的标准输入 (public static final FileDescriptor in = standardStream(0);)。因此,即使您使用 System.setIn() 替换 System.in,控制台类仍将使用真正的标准输入。

您唯一的选择是用 mock 替换 Console 对象。

关于Java I/O - 模拟 System.console() 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29431697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com