2016-11-07 3 views
0

기본 질문. 표준 입력을 특정 문자열로 설정하려고합니다. 현재 내가이 함께 노력하고 있습니다 :stdin을 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))) 

그게 내가 자바에서 그것을 할 거라고 방법과 비슷하기 때문에, 그러나 str.getBytes 내가 검사 할 때 메모리 주소로 설정됩니다의 시스템으로 스칼라에서 다르게 작동하는 것 같다 에 println와 그것을 ....

내가 스칼라 API 검토 한 : http://www.scala-lang.org/api/current/scala/Console $ .html 중에서 # 안에서 설정했는지 (에 : java.io.InputStream를) 단위 내가

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

을 발견했습니다 그러나 이것은 특정 코드 덩어리에 대해서만 입력 스트림을 설정하는 것처럼 보입니다. 이것은 내 JUnit 테스트에서 Setup 메서드의 기능입니다.

+0

스칼라는 약간의 부작용을 싫어합니다.이 스칼라는 다소 잔인합니다. 테스트중인 메서드로 입력 스트림을 전달할 수도 있습니까? – Reactormonk

+0

중복 된 것으로 보입니다 : http://stackoverflow.com/questions/40344117/create-user-prompt-and-simulate-interaction/40350178 – tkachuko

답변

1

내 문제는 내 구체적인 코드가 아닌 내 코드와 관련이 있습니다.

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

내 테스트가 올바르게 실행 : 표준에서/스칼라의 String에 시스템을 무시하는 올바른 방법은 다음과 같다.

+0

또한이 항목은 [공식 scala.Console 문서] (http : //www.w3.org/linux/)에서 에 해당됩니다. /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 (입력) {...}' –