znalazłem dwa następujące wskazówki przydatne do debugowania z this answer:
- Grapher wizualizuje wtryskiwaczy. Jeśli Twój niestandardowy dostawca implementuje HasDependencies, może zwiększyć ten wykres.
- Binder.skipSources() pozwala pisać rozszerzenia, których komunikaty o błędach prawidłowo śledzą numery linii.
Binder.skipSources() jest przydatna, jeśli piszesz ogólnych wiążących metody pomocnika i Guice informuje tylko numer wiersza generycznej metody pomocnika, ale (prawdopodobnie) faktycznie chcą numer linii dzwoniącego o jeden poziom wyżej w stosie zamiast.
Pracuję dla Androida, więc czas kompilacji może być dość wolny od czasu, w którym modyfikuję powiązania, dopóki nie zobaczę wyników moich zmian na urządzeniu lub symulatorze. Dlatego opracowałem testy jednostkowe, które sprawdzą powiązania Guice bezpośrednio na komputerze-hoście. Nawet jeśli nie rozwijasz się na Androida, pomocne może być napisanie testów jednostek wiążących Guice w następujący sposób. Teraz, kopalnia wyglądać mniej więcej tak (tu w Scala - Java będzie wyglądać podobnie)
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])
}
}
Piszę testy począwszy od najgłębiej związanego klasie. Oznacza to, że jeśli C zostanie wstrzyknięte do B, które jest wstrzykiwane do A, rozpocznę testowanie w C. Jeśli testowanie wiązania C w jednostce zakończy się niepowodzeniem, zacznę komentować wstrzykiwane pola w C, dopóki nie otrzymam powiązania, aby odnieść sukces. Następnie poruszam się w górę hierarchii wtrysku, powtarzając ten proces.
Oczywiście, jeśli podążasz za rozwojem opartym na testach i upewnij się, że w pakiecie są włączone pełne testy wiązania guice, wykryjesz te błędy natychmiast po złamaniu powiązania.
wykresy są rzeczywiście bardzo pomocne. musisz po prostu obejść styl = invis bug – wuppi
możesz oznaczyć to java, więc otrzymamy kolorowanie kodu? – wuppi