ユーザーからの入力を受け取るクラスのテスト関数を作成する必要があるテスト駆動開発を行っています。コンソール入力機能はテスト中は入力が止まってしまうので、文字列を使ったInputStreamを使ってテストを書いています。
String str="3\n2\n1\n4\n";
InputStream is = new ByteArrayInputStream(str.getBytes());
assertTrue(app.RunApp(is));
これにより、スキャナからのコンソール入力を含む関数 getChoice(InputStream i) が呼び出されます。
public int getChoice(InputStream i) throws IOException {
Scanner s=new Scanner(i);
s.useDelimiter("\n");
String y= s.next();
int x=Integer.parseInt(y);
return x;
}
上記のコードで、文字列内の数字を 1 つずつ取得する必要があります。しかし、何が起こっているかというと、最初の番号が適切に取得され、ストリームの位置がストリームの最後に直接移動し、NoSuchElementException が発生します。助けてください!