2017-11-08 12 views
1

誰かがテストしたいクラスを作成しました。それはのようなものになります。文字列を入力ストリームに渡す

public class Test{ 
    public static void main(String[] args){ 
     System.in.read("5".getBytes()); 
     foo.<Integer>main(new String[]{}); 
    } 
} 

基本的に、私はへの入力を供給するためにテストクラスを使用しようとしている:

public class foo <E>{ 
    public static void main(String[] args){ 
     Scanner scan = new Scanner(System.in); 
     do_stuff(scan.nextInt()); 
    } 
} 

を私は次のように上記の機能の主なメソッドをテストしようとする別のクラスを持っていますfooのScannerによってすぐに読み込まれるストリーム。他人のコードなので、私はfooを変更することはできません。

なぜこれは機能しませんか?これを行う正しい方法は何ですか?

+0

は、あなたが直接 'doStuff'メソッドを呼び出すことができます。

あなたはSystem.inに接続されたストリームを変更するにはSystem.setIn()を呼び出す必要がありますか?それはあなたがテストすべきものです。なぜなら、languajeによって定義された何かをテストする必要はないからです。 (これは、 '+'演算子が動作しているかテストしたもので、既にlanguajeの開発者がテストしたものです) – Shirkam

+0

また、[Junit](http://junit.org)やその他のテストフレームワークも見てください。 – Shirkam

答えて

2

System.in.read("5".getBytes())が実行するのは、バイト配列をreadメソッドに渡します。このメソッドは、ユーザー入力でそれを埋めようとします。そのバイト配列に置いたデータは完全に無視されます。

System.setIn(new ByteArrayInputStream("5".getBytes())); 
foo.<Integer>main(new String[]{}); 
+1

ソリューションが動作します! – user308485

関連する問題