ユーザー入力用にSystem.inから読み取るクラスに対してテストを実行するにはどうすればよいですか?Javaで入力を読み込むユニットテストクラスは、どのようにして単体テストできますか?
例えば:私は多分メインクラスをサブクラス化し、スクリプトの答えをフィードバックするgetUserInputをオーバーライドすると思ってきました
private int getUserInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("What's ya input? [1-3]: ");
return scanner.nextInt();
}
。入力を決定するためにSystem.outを読む必要がある場合、これは機能しませんが。
スレッドを検索するのに数時間を費やしましたが、これをどのように使用するかはわかりませんでした。
+1これを理解すると、実際にはオブジェクトデザインが異なって見えます。 –
グローバル[周囲]状態を読み取ることは、常に悪い設計です。多くの影響の1つは、テストを貧弱にすることです。/"注入"は無意味な言葉です。それは、コンストラクタを使用するはずの方法でコンストラクタを使用するだけです。入力オブジェクトへのアクセスは*付与されます。 –
@Tom:これは依存性注入の一種であるため、私は「注射する」と言った。依存関係をコンストラクタに渡すことを伴わない他の形式の依存関係注入があります。 –