私はthis answerからのデバッグに便利な次の二つのヒントが見つかりました:
- Grapherインジェクタを可視化します。カスタムプロバイダがHasDependenciesを実装している場合は、このグラフを補うことができます。
- Binder.skipSources()では、エラーメッセージが行番号を正しく追跡する拡張機能を作成できます。あなたは一般的な結合ヘルパーメソッドを書き、Guiceのが唯一のジェネリックヘルパーメソッドの行番号を報告しています(ほとんどの場合)は、実際にアップし、発信者1つのレベルの代わりに、スタックの行番号をしたい場合は
Binder.skipSources()に便利です。
私はAndroid用に開発していますので、デバイスやシミュレータの変更結果が表示されるまで、ビルドの時間がかなり遅くなることがあります。そこで私はホストPC上でGuiceバインディングを直接検証する単体テストを開発しました。 Android用に開発していない場合でも、Guiceバインディングユニットテストを以下のように記述すると便利です。今、私のこのようなものに見える(ここではScalaの中を - Javaは似ています)
class ProviderTest {
var injector : Injector = null
@Before
def setUp() {
injector = Guice.createInjector(
new BindModule1(),
new BindModule2(),
new BindGlobals()
)
}
@After
def tearDown() {
}
@Test def InjectedClass1WasBound() {
val provider = injector.getProvider(classOf[InjectedClass1])
}
@Test def InjectedClass2WasBound() {
val provider = injector.getProvider(classOf[InjectedClass2])
}
}
私が最も深く結合クラスから始まるテストを書きます。つまり、CにBを注入してAに注入すると、Cでテストを開始します。ユニットテストCのバインディングが失敗した場合、バインドを成功させるまで、注入されたフィールドをCでコメントアウトします。そして、私はこのプロセスを繰り返す注入階層を上に移動します。
もちろん、テスト駆動開発に従っていて、あなたのスイートにフルカバレッジGuiceバインディングテストを含める場合は、バインディングを解除するとすぐにこれらのエラーを検出します。
グラフは実際にはかなり役に立ちます。あなたは単純にstyle = invisのバグを回避する必要があります – wuppi
このjavaにタグを付けるとコードカラーが得られますか? – wuppi