Dagger2を使って依存性の存在する箇所をテストしてみた

Dagger2を味見してみたDependency Injectionに関して今更だけど学んだを経て、Dagger2を触ってみました。

簡単な、Injectionの機構を使って、依存関係のある場所をテスト時だけ異なる依存関係にしてテストを実施する、というところまで達成できました。よかったよかった。そして、ある程度理解できたので、あとは実際の実装に落とし込みながらなじませる、が必要そう。

確認した内容はごくごく簡単で、表示する文言をビルド環境によって変更するというもの。Dagger2では、injectionするために@Moduleのアノテーション、@Providerのアノテーションつけられたものに対して以下のようにModuleをセットします。そこで、 SampleTestModule のように依存関係を拡張したModuleを渡してあげれば良いだけ。

Dagger2はコンパイル時に依存性が注入されるので、コンパイルされるまでは DaggerSampleApplication_SampleApplicationComponent に警告が表示されますが、それは気にしない。

通常

      SampleComponent component =
                DaggerSampleApplication_SampleApplicationComponent
                        .builder()
                        .sampleModule(new SampleModule())
                        .build();

依存性注入

      SampleComponent component =
                DaggerSampleApplication_SampleApplicationComponent
                        .builder()
                        .sampleModule(new SampleTestModule())
                        .build();

トラブルシューティング

以下の2点、気をつける必要があった。

compileOptionの追加

Gradleプロジェクトでは以下を追加しましょう。

    packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }

annotationライブラリの追加

Gradleプロジェクトでは以下を追加しましょう。

    compile 'javax.annotation:jsr250-api:1.0'

ref: http://stackoverflow.com/questions/25090570/google-auto-factory-not-annotated-with-provided

その他

終わったあとに見てみたのだが、以下記事も参考になりそう。

ButterKifeとDagger2は触って感覚を覚えたので、今度はRoboGuiceかな。

testotips.ioで、依存性を持つところのテストTipsとか共有したい機運だ。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中