dagger2を使用しているユースケース(MVPアーキテクチャの場合)でjunitテストを行っています。 問題は私のjunitテストケースの中でDagger2注入を使いたいときがあります。 だから私はこのためにDaggerMockライブラリを調べました。私は私のために構築したいと思う特定の依存関係を持っていますが、それはnullを返し続けます。 まず、短剣をどのように設定するかを教えてください。DaggerMock - テストケースでオブジェクトを提供するために短剣を取得する方法
その単一コンポーネント(サブコンポーネントを試みたが、daggerMockはそれで幸せではなかった): AppComponent.java:
@Singleton
@Component(modules = {AppModule.class, NetworkModule.class, RepositoryModule.class, UseCaseModule.class, ActivityModule.class, PresenterModule.class})
public interface AppComponent {
void inject(NetworkSessionManager target);
void inject(SplashActivity target);
void inject(AuthenticationActivity target);
void inject(WelcomeActivity target);
void inject(LoginFragment target);
}
クラスの残りの部分は@Injectで注釈を付けています。 @Injectでクラスコンストラクタをアノテートすると、上記のAppComponentインタフェースで のdelcareをしなくてもいいということです。だからここ
はDaggerMockと私のテストケースである:
@Rule
public final DaggerMockRule<AppComponent> rule = new DaggerMockRule<>(AppComponent.class, new AppModule(null),new RepositoryModule(),new NetworkModule(),new UseCaseModule());
StandardLoginInfo fakeLoginInfo;
TestObserver<Login> subscriber;
DoStandardLoginUsecase target_standardLoginUsecase;//this is what im trying to test so its real
@InjectFromComponent
UserDataRepository userDataRepository; //id like this to be a real instance also but it keeps showing as null
@Before
public void setUp() throws Exception {
target_standardLoginUsecase = new DoStandardLoginUsecase(userDataRepository); // this gets passed a null, why ?
subscriber = TestObserver.create();
}
//....
}
私たちは私は私が私が利用可能なすべての依存関係を持っていることを考えていたので、私はappcomponentからすべての私のモジュールが含まれて定義されたルールを見れば。 私は予想されるコンテキストとしてAppModuleにnullを渡しましたが、それは大きな問題ではないと思います。
私は@InjectFromComponent
注釈が私に欲しいものを与えてくれました。私も@InjectFromComponent(DoStandardLoginUsecase.class)
しようとしましたが、それは動作しません。私はそれがAppComponentに入ることを望みます。 私はUserDataRepositoryオブジェクトを構築します。私はDaggreMockRuleのすべてのモジュールを使用しているので、これを行うのは苦労しないと思いましたか?
私は実際のオブジェクトを構築するためにdagger2を取得できますか?