コマンド ラインから実行および動作するレガシー Java アプリケーションに単体テストを導入するよう依頼されました。基本的に、メイン ループはメニューを出力し、ユーザーが何かを入力すると、さらにデータが表示されます。
この Main クラスは、アプリケーションがどのように機能するかを示しています。
public class Main{
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static void main(String argv[]) throws IOException{
while (true) {
char input = (char) reader.read();
if(input == 'x'){
return;
}
System.out.println(input);
}
}
}
テストメソッドを次のようにしたい
public void testCaseOne(){
Main.main();
String result = "";
result = sendInput("1");
assertEqual(result, "1");
result = sendInput("x");
assertEqual(result,"");
}
System.setOut()
およびメソッドについては認識していますが、メソッドがスレッドをブロックしているため、このコンテキストでメソッドを機能さSystem.setIn()
せる方法がわかりません。System.setIn()
reader.read()
私のテスト設計は間違っていますか?sendInput()
ブロッキング Reader.read() 呼び出しを介して動作するようにメソッドを設計する方法はありますか?