如何将stdin重写为String

时间:2016-11-07 19:03:21

标签: scala stdin

基本问题,我想将标准输入设置为特定字符串。目前我正在尝试这个:

import java.nio.charset.StandardCharsets
import java.io.ByteArrayInputStream
// Let's say we are inside a method now
val str = "textinputgoeshere"
System.setIn(new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8)))

因为这与我在Java中的方式类似,但是str.getBytes似乎在Scala中的工作方式不同,因为当我用println检查它时,System in被设置为内存地址....

我查看了Scala API:http://www.scala-lang.org/api/current/scala/Console $ .html#setIn(in:java.io.InputStream):Unit 我找到了

def withIn[T](in: InputStream)(thunk: ⇒ T): T

但这似乎只设置了特定代码块的输入流,我希望这是我的JUnit测试中的Setup方法中的一个功能。

1 个答案:

答案 0 :(得分:1)

我的问题最终与我的代码有关,而不是这个特定的概念。将标准输入/系统输入覆盖到Scala中的字符串的正确方法如下:

val str = "your string here"
val in: InputStream = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8))
Console.withIn(in)(yourMethod())"

我的测试现在正确运行。