2016-07-26 6 views
3

は、私はそうのようなクラスがあります。テストのメソッド呼び出しを「インターセプト」するにはどうすればよいですか?

class A { 

    public static void makeCall() { 
     URL url = "www.google.com"; 
     InputStream result = url.openStream(); 
     //Do more stuff 
    } 
} 

を、私はそれのためのユニットテストを書きたいです。私が何をしたいのかは、openStream()への呼び出しのようなもので、静的メソッドmakeCall()を実行して、実際に呼び出しを行う代わりにハードコーディングされたJSONを戻すことができます。私はこれをどうやって模倣するか、それが可能であるかどうかを理解することができませんでした。

Angularの$httpBackendと同じ動作をお探しですか、ご意見やご提案はありますか?

+1

実際にテストしようとしているロジックからHTTPコードを分離する必要があります(依存性注入と考える)。 – SLaks

+1

だから、あなたの呼び出しを 'makeHTTPCall(URL url)'のようなものに分けて、JSONを返すためにそのメソッドを擬似的に使うことを考えていますか?それは間違いなく動作する可能性があります –

+0

もしあなたが実際にそれを模倣しなければならない場合は、JMockitのmockingライブラリ( '@Mocked URL url'模擬フィールドを宣言し、' openStream() 'に希望の期待値を記録してください) –

答えて

3

メソッドメンバー変数をモックする必要はありません。より良い設計をするには、urlをメソッドのパラメータにします。

public static void makeCall(URL url){ 

次に、模擬試験で合格になります。

これにより、将来のより柔軟なコード再利用が可能になります。

+0

これは私がやったことです。それは簡単に嘲笑され、デザインがより良く感じられました。 –

関連する問題