2

よりクリーンなテストを容易にするために、Android アプリケーションの開発時に Inversion of Control を使用したいと考えています。Activityプレーンな Java オブジェクトを使用するのは簡単に見えますが、とにモック データをシードしたい場合Service、それらのコンポーネントの依存関係をコンストラクターに渡すことができないため、問題が発生し始めます。

例として、通常の使用でActivityはリアルを使用したいが、テストのために、実際にはインターネットに接続しないモックを使用したいとします。のIoCを介してこれを達成する方法はありますか?HttpUrlConnectionHttpUrlConnectionActivity

Factory などの依存性注入オプションや、Dagger などのライブラリが役に立ちますが、これを達成する他の方法があるかどうかに興味がありました。

4

1 に答える 1

2

これらのクラスは Android ランタイムによってパラメーターなしのコンストラクターでインスタンス化されるため、サービスまたはアクティビティのコンストラクター注入は Android では不可能であるため、外部オブジェクトを作成する何らかの種類のファクトリが必要です。これを解決するには、次のようなモック実装を持つ Factory-Interface を作成します。

public class MyService : Service {
   public static IFactory myFactory = new MyFactory(); 
             // the non-mocked version used as Default

   void myLocalFunction() {
     ...
     HttpUrlConnection connection = myFactory.createHttpUrlConnection();
     ... 
   }
}


public MyServiceTest : ... {
 class MyMockedFactory : MyFactory {
    HttpUrlConnection createHttpUrlConnection(){return new MockedHttpUrlConnection();}
 } 

 public myTest() {
  MyService.myFactory = new MyMockedFactory();
  .... do the test ...
 }
}
于 2013-05-08T10:49:29.250 に答える