2017-04-06 18 views
2

かいつまんで、私はAsyncTaskの「doInBackground」方式で実行されるコードをテストする必要があります。AsyncTaskの抽象クラスで保護されたメソッドでコードをユニットテストする方法はありますか?

これはAndroidスタジオのPowerMockito/Mockito/Robolectric/JUnit4です。

は、私は認識してテスト書かれたコードは、理想から遠く
ですが、私はこの中に何の言葉を持っていないと私は元のコードを変更することはできませんよ。

は、これはそうである:

public void methodToTest(){ 
    new AsyncTask<Integer, Void, Boolean>() { 
     @Override 
     protected Boolean doInBackground(Integer... integers) { 

      //How to test code written over here ? 

      return false; 
     } 
    } 
    } 

は、これを解決する方法はありますか? 任意の提案は非常に高く評価されている

+0

http://stackoverflow.com/questions/15035850/testing-async-tasks-with-robolectricを見ましたか? –

+0

@EugenMartynov Googleのクエスト中に私はそれを見つけられませんでした。私が正しい場合、それはAsyncTask自体を検証することですか?私の目標は、AsyncTaskのdoInBackgroundメソッドで使用されるコードをテストすることです。私が間違っているなら、私を修正してください。 – user2417217

+0

ああ、私は抽象クラスをテストしたいと思っていませんでした。必要に応じていつでもテストでそれを拡張し、ダミー方法で抽象メソッドを実装することができ –

答えて

0

醜いありますが、ここで働い回り道:リフレクション。

点である:上記のコードは、匿名の内部クラスを宣言する。しかし、事は:匿名の内部クラスでさえ、固有の定義された名前を持っています。

リフレクションを使用すると、そのような匿名の内部クラスのオブジェクトをインスタンス化することは完全に可能です。

どのように動作するかを知るには、hereの外観が必要です。

沸点:methodToTest()を含むクラスのオブジェクトをインスタンス化することができます。その内部クラスのオブジェクトをインスタンス化することもできます。そして、これらのオブジェクトのいずれかでメソッドを呼び出すことができるはずです。

しかし、それがうまくいって合理的な単体テストになっても、おそらく生産者のコードを書く人々にそれらのテストを見せたいと思うでしょう。彼らにそれを明確にするためにテスト可能生産コードを書くための彼らの不本意を引き起こしている害の種類!

+0

は、詳細な回答のためにありがとうございました。 この事件は悪いので、私は確かにこの問題について話し合うつもりです。 しかし、その間に私は提供された例をチェックし、それが動作するかどうかを見てみましょう! – user2417217

関連する問題