2016-11-07 2 views
0

基本的な質問は、標準入力を特定の文字列に設定する必要があります。現在、私はこれでそれをしようとしています:それは、私はJavaでそれを行うだろうかと似ていますので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))) 

、しかしstr.getBytesは、私がチェックしたときにメモリアドレスに設定されている中で、システムとしてのScalaで異なる動作をするようですprintlnとそれ....

私はScalaのAPIを見てきました:http://www.scala-lang.org/api/current/scala/Console $の.html#SETIN(中:java.io.InputStreamを):ユニット と私は

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

を見つけましたしかし、これはコードの特定の塊のための入力ストリームを設定するようだ、私はしたいこれは私のJUnitテストのSetupメソッドの機能です。

+0

Scalaは副作用が嫌いですが、これはむしろ残酷なものです。テストしているメソッドに入力ストリームを渡すこともできますか? – Reactormonk

+0

重複のように見えます:http://stackoverflow.com/questions/40344117/create-user-prompt-and-simulate-interaction/40350178 – tkachuko

答えて

1

私の問題は、この特定の概念ではなく、自分のコードに関連するものになりました。 ScalaのStandard In/System Inを文字列に上書きする正しい方法は次のとおりです。

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

私のテストは正しく実行されました。

+0

また、このトピックは[公式のscala.Consoleドキュメント](http: //www.scala-lang.org/api/current/scala/Console$.html) 入力ソースとして java.io.StringReaderを使用できます 'val input = new StringReader(s" $ {customStrInput} \ n ")' またはファイル内容 'val入力:Reader = openFile(" file.txt ")''Console.withIn(入力){...}' –

関連する問題