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とか共有したい機運だ。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s