2016-08-10 10 views
3

アプリで特定の条件が発生したときにエラーメッセージが記録されるかどうかを確認する必要があるユニットテストを実行する必要があります。ユニットテストの方法Log.eはandroidにありますか?

try { 
     //do something 
    } catch (ClassCastException | IndexOutOfBoundsException e) { 
     Log.e(INFOTAG, "Exception "+e.getMessage()); 
    } 

どうすればテストできますか?ユニットテスト中に以下のエラーが表示されます。

Caused by: java.lang.RuntimeException: Method e in android.util.Log not mocked. 

答えて

3

これを行うには2つの方法があります。

  1. あなたはPowermockまたはPowermokitoに向けます。これらのモッキングフレームワークは、Log.e()への静的呼び出しを模擬する/確認することができます。
  2. 静的呼び出しを置き換えることを検討できます。

例:

interface LogWrapper { 
    public void e(whatever Log.e needs); 
} 

class LogImpl implements LogWrapper { 
    @Override 
    e (whatever) { 
    Log.e (whatever) ; 
    } 

そして、あなたがログインしたいクラス内LogWrapperオブジェクトを利用できるように依存性注入を使用する必要があります。通常の「生産」用途では、そのオブジェクトは単にLogImplのインスタンスです。テストのために、自分で書かれたimpl(それに送信されたログを追跡する)を使うか、または、ノンパワー・モッキング・フレームワーク(EasyMockやMokitoなど)を使ってモックすることができます。次に、モッキング・フレームワークの検査/検証の側面を使用して、「予想されたパラメータでログが呼び出されました」をチェックします。

注意:設定によっては、オプション2が過剰使用される可能性があります。しかし、私は個人的に、私はPowermockの使用を避けます。単に私がPowermockの奇妙な問題を捜している私の人生の時間を無駄にしてしまったからです。そして、私はカバレッジ測定をするのが好きです。時にはPowermockはあなたにも問題を与えます。

しかし、あなたは基本的にはhere (powermockito)またはhere (powermock)としたいと思っています。そして、記録のために:次回にあなたのお気に入りの検索エンジンを使ってみてください。それはあなたが最初にこのようなことを求めているようなものではありません。

+0

返信いただきありがとうございます。最初にオプション1を試してみたいと思います。 PowerMockitoを使ってどうやってモックできますか?いくつかのコードを共有していただけますか? – NewOne

+0

私の更新答えを見てください。 – GhostCat

関連する問題