私は、学生の宿題がうまくいくかどうかを評価するためのテストプログラムを書くことを任されています。生徒たちは、Javaでじゃんけんゲームを作成し、コマンドラインでユーザーに入力を求めることで、nラウンドのゲームをプレイする単一のクラスを作成しています。これらの生徒は全員、1つ以上のScannerオブジェクトを使用してコンソールから入力を読み取ります。そのため、テストプログラムで事前に定義された入力をシミュレートし、期待される出力を確認する必要があります。System.inをオーバーライドするので、学生がを呼び出すとScanner myReader = new Scanner(System.in);
、入力が何であるかを指示することができます(ByteArrayInputStreamを使用)。私がどのように始めたかを知るために:
public class TestRockPaperScissors extends RockPaperScissors{
public static void main(String[] args){
InputStream stdin = System.in;
try {
System.setIn(new ByteArrayInputStream("<test inputs here>".getBytes()));
RockPaperScissors.main(null); // This will be student code in another file.
} finally {
System.setIn(stdin);
}
}
問題は、これは、学生がSystem.inを使用して単一のスキャナーのみを作成する場合にのみ機能することです。そうしないと、2番目のスキャナーが.next()を使用するための入力がないため、エラーが発生します。
TL; DR ... RockPaperScissors.main(null)呼び出しのソースが表示されない場合、任意の数のスキャナーのコンソール入力をシミュレートするにはどうすればよいですか?