如何将标准输入覆盖为字符串
How to override stdin to a String
基本问题,我想将标准输入设置为特定的字符串。目前我正在尝试这样做:
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 方法的一项功能。
我的问题最终与我的代码有关,而不是这个特定的概念。在 Scala 中将 Standard In / System In 覆盖为字符串的正确方法如下:
val str = "your string here"
val in: InputStream = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8))
Console.withIn(in)(yourMethod())"
我的测试 运行 现在正确了。
基本问题,我想将标准输入设置为特定的字符串。目前我正在尝试这样做:
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 方法的一项功能。
我的问题最终与我的代码有关,而不是这个特定的概念。在 Scala 中将 Standard In / System In 覆盖为字符串的正确方法如下:
val str = "your string here"
val in: InputStream = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8))
Console.withIn(in)(yourMethod())"
我的测试 运行 现在正确了。