2011-03-05 13 views
6

मान लीजिए कि मैं JavaScript में निम्न मॉड्यूल तरह पैटर्न का इस्तेमाल किया करते हैं:यूनिट परीक्षण निजी कक्षाएं

var myModule = (function() { 
    var Foo = function() { /* ... */ }; 
    var Bar = function() { 
     this.foo = new Foo(); 
    }; 
    Bar.prototype.someMethod = function() { 
     this.foo.someMethod(); 
    }; 
    return { 
     'Bar': Bar 
    }; 
})(); 

यह सलाह दी जाती है और अगर हां - मैं कैसे इकाई परीक्षण के लिए फू बेनकाब कर सकते हैं? क्या ऐसा करने के लिए कुछ आम तकनीक या पैटर्न है?

उत्तर

6

मुझे नहीं लगता कि आपको वास्तव में private सदस्यों का परीक्षण करने की आवश्यकता होनी चाहिए। जब तक आपके पास सार्वजनिक सदस्यों पर व्यापक परीक्षण हो, तब तक निजी सदस्यों के भीतर कोई भी त्रुटियां सार्वजनिक सदस्यों पर त्रुटियों के रूप में प्रकट होंगी। फिर आप सही ओएल 'डिबगिंग का उपयोग करके पता लगा सकते हैं कि सटीक समस्या क्या थी।

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

var myModule = (function() { 
    var _this = this; 
    var Foo = function() { /* ... */ }; 
    var Bar = function() { 
     this.foo = new Foo(); 
    }; 
    Bar.prototype.someMethod = function() { 
     this.foo.someMethod(); 
    }; 
    return { 
     'Bar': Bar, 
     '__private__': _this 
    }; 
})(); 

function test_foo(obj) { 
    var foo = obj.__private__.Foo; 
    assert(foo.prop, 10) 
} 

एक इन-हाउस प्रणाली के लिए, निजी डेटा/कार्यों का उपयोग करने में सक्षम होने आमतौर पर एक गैर मुद्दा है, अगर यह स्पष्ट रूप से समझा जाता है कि निजी सदस्यों तक पहुँचने नहीं किया जाना चाहिए है। यह __private__ जैसे नाम के साथ संलग्न वस्तु का संदर्भ प्रदान करके हाइलाइट किया गया है। (क्या आप बता सकते हैं कि मैं पाइथन में थोडा हूं?))

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