2011-11-23 15 views
5

私はAndroid上でScalaの問題があるため、最近AndroidでProGuardを導入する必要がありました。未使用と思われるクラスを削除する縮小機能のためにProGuardが必要です。私は、クラスをテスト容易性に与えることの影響について非常に懸念しています。ProGuardでは、テスト戦略にどのような影響がありますか?

私は、Androidプラットフォーム上で完全に統合されたアプリケーションを実行するホストおよび受諾テストで実行される単体テストを作成します。

通常、私は比較的完全な単体テストカバレッジと不自然な受け入れテストカバレッジに満足しています。しかし、私のコードでは、Guiceの依存性注入を大量に使用しているので、これまでProGuardが予測することが難しい方法でコードを削除するのは私の経験でした。このため、バグを導入する可能性が非常に高いです。

これは、ある時点でクラスが見つからない可能性があるため、完全なカバレッジを達成する受入れ/プラットフォームテストを書く必要があると私に思います。

他にもこの体験がありますか?もしそうなら、あなたのテスト戦略は何ですか?経験を積むと、ProGuardが削除しているクラスが本当に不要になっていると自信が持てますか?

答えて

2

ProGuardのは、アプリケーションを中断されません。

私の経験から(Androidで難読化されたScalaでも)、単純な煙のテストを使用してProGuardがAndroidアプリケーションに引き起こした問題を発見するのは本当に簡単です。あなたはあなたのプロジェクトにどのようなライブラリを含めるか知っています。そのうちのいくつかがリフレクションまたはクラス#forNameを使用している場合、それらに対してスモークテストを実行します。次に、必要なクラス/メンバーをProGuard構成から除外します。

ActivityInstrumentationTestCase2とエミュレータを使用して、難読化されたプロジェクトのテストを自動化できることにも注意してください。プロジェクトでProGuardを使用する予定の場合は、難読化されたAPKで必ず計測テストを実行してください。

結論 - 恐れはありません。 ProGuardに関連した問題は、相対性理論を見つけやすくなります。

+0

これは一般的には真実ですが、Facebook android SDKなどのような奇妙なライブラリを使用すると、奇妙な不一致に注意してください。それは一般的に物事を壊す。 –

2

私たちはユニットテストとProGuard-edアプリケーションの "完全な"テストをしばらく行ってきましたが、実際の問題はありませんでした。主なアプリケーションで使用されていないテストでいくつかのライブラリメソッドを使用している場合は、唯一の問題です。このような場合、ProGuardはライブラリからコードを削除し、手動で特定のメソッドをproguard.cfgに追加する必要があります。それが削除されたクラスおよび/または難読化されたメンバーに反射またはクラス#にforNameを使用しようとするまで

ああ、我々はまた、Guiceのを使用:)

+0

私が見たことから、多くのロボグイスの顧客はGuiceを明示的に使用していません。あなたは主にRoboguiceのAndroidリソース注入を使用していますか、または自明ではないGuiceモジュールとの広範なバインディングを行っていますか? –

+1

私たちは非ロボギツのものをかなり注入します。私はそれが "広範囲の拘束力"と "非自明"と認めるかどうかは分かりません。私の全体的な印象は、あなたが本当に心配してはいけないということです、ProGuardは仕事をうまくやっています。 – dmon

関連する問題