問題タブ [dagger]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1799 参照

java - アクティビティやサービスなどの Android コンポーネントで制御の反転を使用できますか?

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

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

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

0 投票する
2 に答える
738 参照

java - 単純な短剣単体テストが失敗する

私は短剣が初めてです。短剣の使用方法を理解するために、非常に単純な単体テストを作成しました。残念ながら失敗します。私は短剣の基本原理を理解していないかもしれません。

そして失敗した私のテストクラス

A は B を注入することを望んでおり、DaggerModule には B を作成する @Provides アノテーション付きメソッドが含まれているため、短剣は B を A に注入すると考えました。

アップデート:

このようにモジュールクラスを書くと、

AへのBの注入は機能します。ただし、モジュールにAのインスタンスを構築するProvidesアノテーション付きメソッドがある場合に機能しない理由がわかりません。その場合、インジェクションを機能させる唯一の方法は、実際にインジェクションを自分で次のように記述することです。

または、Bを受け入れるコンストラクターをAに作成して、次のように記述できるようにします

B を受け入れるコンストラクターまたはセッターを A に持つ必要性は、Dagger を使用することで回避できると私が考えた種類のオーバーヘッドでした。

だから私は何か間違ったことをしているのですか、それとも短剣の機能を誤解しましたか?

0 投票する
1 に答える
4008 参照

java - ダガー カスタム スコープ、方法は?

Dagger でカスタム スコープを作成するには?

ガイドラインはありますか?見つかりませんでした。

Vaadin アプリケーションを開発しており、カスタム スコープが必要になります。UiScoped のようなもの。

よろしくお願いします

0 投票する
1 に答える
717 参照

android - Robolectric、Dagger、およびコンパイル時の $ModuleAdapter の作成

Android TDD シリーズの他の 質問に続いて、 RobolectricMockitoMaven、およびABSを使用して、Android 開発の単体テストを行うことができました。明らかに、私は自分の知識の限界を押し広げているように見えますが、Android CI の夢はあまりにも魅力的です。私の次の問題を手伝っていただけるなら、とても感謝しています。

アプリケーションのデータベースを v1 から先頭に移動する統合テスト ケースを作成したいと考えています。私はDI にDaggerを使用しており、この非標準の JUnit テストを容易にするために、アップグレードを実行するために必要なクラスをテストに挿入しています。

注意すべき重要な点;

  • テストは、テスト中のプロジェクトとは別に、独自のテスト プロジェクトの下に存在します (構造については、リンクされた質問を参照してください)。
  • 失敗 (以下のスタック トレース) は、実際のアプリケーションのモジュール グラフを作成するときに発生します。
  • インジェクター ルール (以下で説明) は、アプリケーションを実際に実行するときに使用されるモジュールを含むテスト プロジェクト モジュールにリンクします。

DaggerInjectorルールの下で何が起こっているのですか?

テストに必要な依存関係を注入しようとします。

テストモジュールはどのように見えますか?

テストおよび (予定の) テスト モックの置換用のエントリ ポイント (これはであり、 replacesdagger-0.9.1の最新のものではありません) を追加します。injectentryPoints

実際のアプリケーションのオブジェクト グラフを作成するコード行をコメント アウトすると、テストは緑色で実行されます。これがスタック トレースです。

エラー 1: 私のテストの観点からは、捕らえられて飲み込まれました

dagger.internal.RuntimeAggregatingPlugin#getModuleAdapter

エラー 2: Robolectricによってコンソールにダンプされる

これまでの調査

「Error 1」が発生した理由に焦点を当てています。ユーザー ガイドの「コンパイル時のコード生成」の側面を読むと、RuntimeAggregatingPlugin が探しているアダプター ( OceanLifeModule$ModuleAdapter) がコンパイル時に生成されることがわかります。それから、私は自分の Maven 構成を調べてきました。コミュニティがこれを理解する必要があると感じた場合は、喜んでそれを提供します。「エラー 2」の低レベルの性質は、根本原因よりも派生的なものだと思います。

0 投票する
1 に答える
2942 参照

android - Robolectric テストで Dagger モジュールをオーバーライドする

私はAndroidアプリケーションに取り組んでおりDagger、依存性注入に使用しています。

これらの依存関係のいずれかを持つフラグメントをテストしようとしています。それを と呼びましょうProductsService

私のRobolectricテストでは、オーバーライドするテストモジュールを持っているところまで行きましたProductsService

私のテストでは、フラグメントを実行するために、次のように構築します (ここで見られるように、Robolectric でフラグメントをテストするにはどうすればよいですか? )

問題は、この作成中にDagger依存関係を満たすために呼び出しを行うことです。

フラグメントの作成時に作成されたオブジェクト グラフをオーバーライドしMockProductsModuleて、テストで I 宣言を使用するにはどうすればよいですか?

0 投票する
1 に答える
852 参照

dependency-injection - 短剣: コード生成またはリフレクション?

Dagger のコード生成が正しく機能しているかどうかを確認するにはどうすればよいですか? 代わりにリフレクションが使用されていることをユーザーが最終的に発見したスレッドがいくつかあります。

サンプルのコーヒー メーカー アプリケーションを Eclipse で実行しましたが、たとえば Thermosiphon でブレークポイントを設定すると、スタックに生成されたクラスが表示されません。ReflectiveAtInjectBinding が表示されるため、セットアップが正しくないのではないかと疑われます。