2011-12-22 13 views
9

मेरे पास बाइंडिंग का एक जटिल सेट है जिसमें robot legs problem को हल करने के लिए कई निजी बाइंडिंग शामिल हैं।जटिल गाइड बाइंडिंग को डीबग करने के लिए आप किस तकनीक का उपयोग करते हैं?

समझदार बोली-प्रक्रिया त्रुटियों की रिपोर्ट करने के लिए गुइस की सीमित क्षमता के कारण, मैं सोच रहा हूं कि गुइस के रनटाइम अपवादों को पढ़ने के अलावा रनटाइम बाध्यकारी त्रुटियों की समस्या निवारण के लिए कौन सा प्रभावी टूल या तकनीक, यदि कोई है, तो मैं सोच रहा हूं।

कॉन्फ़िगरेशन कोड के माध्यम से कदम उठाना सहायक नहीं है, क्योंकि कॉन्फ़िगरेशन ऑब्जेक्ट तत्काल समय के बजाय बूट समय पर होता है, जहां त्रुटियां आमतौर पर होती हैं।

गुइस ग्राफ प्लगइन संभवतः उपयोगी होगा अगर यह काम करता है - इसके साथ मेरे प्रयोगों के परिणामस्वरूप गलत ग्राफ हैं।

+0

ग्राफ वास्तव में बहुत उपयोगी हैं। आपको बस शैली = आविष्कार बग – wuppi

+0

के आसपास काम करना होगा, क्या आप इस जावा को टैग कर सकते हैं, इसलिए हमें कोड-रंग मिल रहा है? – wuppi

उत्तर

6

मैं this answer से निम्नलिखित दो सुझावों डीबगिंग के लिए उपयोगी पाया:

  • Grapher की परिकल्पना करती इंजेक्टर। यदि आपका कस्टम प्रदाता HasDependencies लागू करता है, तो यह इस ग्राफ को बढ़ा सकता है।
  • Binder.skipSources() आपको उन एक्सटेंशन को लिखने देता है जिनके त्रुटि संदेश लाइन नंबरों को सही तरीके से ट्रैक करते हैं। यदि आप सामान्य बाध्यकारी सहायक तरीकों लिखने और Guice केवल सामान्य सहायक विधि की लाइन संख्या बताता है, लेकिन आप (सबसे अधिक संभावना) वास्तव में फोन करने वाले एक स्तर ऊपर के बजाय ढेर के लाइन नंबर चाहते

Binder.skipSources() उपयोगी है।

मैं एंड्रॉइड के लिए विकास कर रहा हूं, इसलिए जब तक मैं डिवाइस या सिम्युलेटर पर अपने परिवर्तनों के नतीजे देखता हूं तब तक बिल्डिंग समय मेरी धीमी गति से संशोधित हो सकता है। इसलिए मैंने यूनिट परीक्षण विकसित किए हैं जो मेजबान पीसी पर सीधे गिइस बाइंडिंग को सत्यापित करेंगे। यहां तक ​​कि यदि आप एंड्रॉइड के लिए विकास नहीं कर रहे हैं, तो भी निम्नानुसार गिइस बाध्यकारी इकाई परीक्षण लिखना सहायक हो सकता है। अभी, मेरा कुछ इस तरह दिखाई (स्काला में यहाँ - जावा समान लगेगा)

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]) 
    } 
} 

मैं सबसे गहरा बाध्य वर्ग से शुरू परीक्षण लिखें। यानी, अगर सी को बी में इंजेक्शन दिया जाता है, जिसे ए में इंजेक्शन दिया जाता है, तो मैं सी पर परीक्षण करना शुरू कर दूंगा। यदि इकाई परीक्षण सी की बाध्यकारी विफल हो जाती है, तो मैं सफल होने के बाध्य होने तक इंजेक्शन वाले फ़ील्ड को तब तक टिप्पणी करना शुरू कर दूंगा। फिर मैं इस प्रक्रिया को दोहराने इंजेक्शन पदानुक्रम को अपना रास्ता बढ़ाता हूं।

बेशक यदि आप टेस्ट-संचालित विकास का पालन करते हैं, और अपने सूट में पूर्ण कवरेज गिइस-बाध्यकारी परीक्षण शामिल करना सुनिश्चित करते हैं, तो आप बाध्यकारी तोड़ने के तुरंत बाद इन त्रुटियों का पता लगाएंगे।

संबंधित मुद्दे

 संबंधित मुद्दे