2011-12-22 70 views
9

我有一套複雜的綁定,其中包含許多專用綁定來解決robot legs problem你使用什麼技術來調試複雜的guice綁定?

由於Guice報告可理解的出價錯誤的能力有限,所以我想知道除了閱讀Guice的運行時異常外,還有哪些有效的工具或技術可用於解決運行時綁定錯誤。

單步執行配置代碼並沒有幫助,因爲配置是在啓動時發生的,而不是在對象實例化時發生的,通常會發生錯誤。

Guice圖插件可能會有用,如果它的工作 - 我的實驗導致不正確的圖形。

+0

圖表實際上非常有幫助。你只需要解決style = invis bug – wuppi 2012-02-09 12:41:13

+0

你可以標記這個java,所以我們得到代碼着色? – wuppi 2012-02-10 14:31:04

回答

6

我發現下面的兩個小技巧可用於調試從this answer

Binder.skipSources(),如果你編寫通用的綁定的輔助方法和吉斯只報告的一般helper方法的行號,但你(最有可能)實際所需號碼的上一級堆棧,而不是行號是很有用的。

我正在爲Android開發,所以構建時間可能會很慢,從我修改綁定時開始,直到看到設備或模擬器上的更改結果。所以我開發了單元測試,可以直接驗證主機上的Guice綁定。即使你沒有爲Android開發,也可以按如下方式編寫Guice綁定單元測試。現在,我看起來像這樣(這裏在斯卡拉 - 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注入到注入到A中的B中,我將開始在C中進行測試。如果單元測試C的綁定失敗,我將開始註釋C中注入的字段,直到獲得綁定成功爲止。然後我沿着注入層次重複這個過程。

當然,如果您遵循測試驅動開發,並確保在您的套件中包含全面覆蓋的Guice綁定測試,那麼只要您打破綁定,就會檢測到這些錯誤。

相關問題