Основной вопрос, я хочу, чтобы стандартный ввод был конкретной строкой. В настоящее время я пытаюсь его с этим:Как переопределить 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 ....
Я посмотрел на Scala API: http://www.scala-lang.org/api/current/scala/Console $ .html # setIn (в: java.io.InputStream): Unit и я нашел
def withIn[T](in: InputStream)(thunk: ⇒ T): T
Но это, по-видимому, только устанавливает поток ввода для определенного фрагмента кода, я бы хотел это будет функцией метода установки в моих тестах JUnit.
У Scala есть небольшая неприязнь к побочным эффектам, и эта является довольно жестокой - можете ли вы также передать входной поток в метод, который вы тестируете? – Reactormonk
Выглядит как дубликат: http://stackoverflow.com/questions/40344117/create-user-prompt-and-simulate-interaction/40350178 – tkachuko