将数据写入System.in
在我们的应用程序中,我们期望 Thread
中的用户输入如下:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
我想在单元测试中传递该部分,以便我可以恢复线程来执行其余代码。如何从 junit 向 System.in
写入内容?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您想要做的是使用方法
setIn()
来自系统
。这将允许您将数据从 junit 传递到 System.in 中。What you want to do is use the method
setIn()
fromSystem
. This will let you pass data intoSystem.in
from junit.在测试期间更换它:
Replace it for the duration of your test:
除了上面的建议(编辑:我注意到 Bart 也在评论中留下了这个想法),我建议通过让类接受输入源作为构造函数参数来使你的类更具单元测试性或类似的(注入依赖项)。无论如何,类不应该与 System.in 如此耦合。
如果您的类是从 Reader 构造的,您可以这样做:
Instead of the suggestions above (edit: I noticed that Bart left this idea in a comment as well), I would suggest making your class more unit testable by making the class accept the input source as a constructor parameter or similar (inject the dependency). A class shouldn't be so coupled to System.in anyway.
If your class is constructed from a Reader, you can just do this:
我当前(2018 年)的解决方案是:
[2019 年更新] 对于 JUnit4 测试,有一个用于这些任务的框架:
https://stefanbirkner.github.io/system-rules/
(JUnit5 的升级正在进行中:https://github.com/stefanbirkner/system -规则/问题/55)
My solution currently (in 2018) is:
[Update in 2019] For JUnit4 Tests there is a framework for these tasks:
https://stefanbirkner.github.io/system-rules/
(the upgrade to JUnit5 is on going: https://github.com/stefanbirkner/system-rules/issues/55)