2015-09-18 12 views
5

testDebugを実行したときにのみandroid.util.Logがmockedされていないので、ユニットのテストがメソッドdで失敗しています。 testReleaseを実行している場合はすべて正常であり、正しく通過します。 これはなぜ起こっているのですか? コンソールとAndroidスタジオからgradleを実行するときと同じことが起こります。Androidユニットのテストでデバッグに失敗するビルドタイプ

答えて

1

ここでは、将来の参考のためにこれをどのように解決したか説明します。 リリースではなくデバッグで動作するテストの問題は、Log.d(およびアンドロイドフレームワークのフレンド)が正しく嘲笑されなかったためです。 リリースとしてビルドされたときに動作する理由は、ビルド設定のこのプロパティに基づいてログが条件付きだったためです。基本的にif(BuildConfig.type!= "Release")Log.d(...)があり、コンパイラは最終値のためにこのブロックを削除するため、リリースをテストするときには呼び出されません。 静的メソッドLog.dをモックするにはPowerMockを使用しました。 Mockingは簡単でしたが、Power Mockを設定することは本当に面倒ですので、おそらくそれを行うより良い方法があるかもしれません。

0

チェックアウト"Method ... not mocked" Android Studioプロジェクトサイトのリンク。 それは言う:

ユニットテストを実行するために使用されるandroid.jarファイルは、任意の実際のコードが含まれていません - 実際のデバイスでAndroidシステムイメージで提供されています。代わりに、すべてのメソッドは例外をスローします(デフォルトで)。これはユニットテストがコードをテストするだけで、Androidプラットフォームの特定の動作(Mockitoなどを使って明示的に嘲笑していない)には依存しないことを確認するためです。それが問題のあることが判明した場合、あなたはこの動作を変更するためにあなたのbuild.gradleするには、以下のスニペットを追加することができます。

build.gradle 
    android { 
    // ... 
    testOptions { 
     unitTests.returnDefaultValues ​​= true 
    } 
} 

を私たちは、ログインまたはTextutilsなどと意志のようなクラスを使用する場合、デフォルトの動作に問題があることを知っています将来のリリースで可能なソリューションを評価してください。

ここでは例外を取り除くために使用しました。

関連する問題