2013-03-10 15 views
17

में यूनिट परीक्षण 'निजी' उपयोगिता फ़ंक्शन कैसे करें मैं वर्तमान में एक नोडजेज़ एप्लिकेशन के लिए कुछ परीक्षण लिख रहा हूं। को लगता है कि मैं इस तरह एक मॉड्यूल है:नोडजेस

module.exports = function myModule(moduleParam) { 
    var someVar; 
    .... 
    .... 
    function helper(param) { 
     return param + someVar; 
    } 
    return { 
     doSomething: function (bar) { 
      .... 
      .... 
      var foo = helper(bar); 
      .... 
      .... 
     } 
    }; 
}; 

मान लें 'सहायक' समारोह केवल मॉड्यूल के भीतर उपयोगी है और बाहर के संपर्क में नहीं किया जाना चाहिए।

इसका परीक्षण करने के लिए 'सर्वोत्तम अभ्यास' क्या है? (बेशक, मैं पूरी तरह से कुछ काम करने का परीक्षण कर सकता हूं, लेकिन इस तरह, 'सहायक' फ़ंक्शन का परीक्षण किसी विशेष स्थिति में 'ब्लैक-बॉक्स' फैशन में किया जाता है)।

मैं उस मेटर के लिए परीक्षण ढांचे के रूप में नोड्यूनिट का उपयोग कर रहा हूं, लेकिन मैं इसे आवश्यकता पर बदल सकता हूं।

+0

मैं डॉन

आप उदाहरण में यह कैसे आप इसका इस्तेमाल होता है ऐसा नहीं लगता कि आप इसका परीक्षण कर सकते हैं, क्योंकि इसके लिए आपको स्थानीय-स्कोप्ड चरों तक पहुंचने की आवश्यकता होगी – Bergi

+0

आप लिख सकते हैं एक फ़ंक्शन जो वास्तव में निर्यात करने के लिए एक और फ़ंक्शन संलग्न करेगा यदि आप वास्तव में परीक्षण चला रहे हैं? – phenomnomnominal

+0

@ फेनोमनोमनोमिनल, आपका मतलब केवल तभी निर्यात किया जाता है जब कुछ 'टेस्ट' ग्लोबल वैरिएबल को परिभाषित किया गया हो या ऐसा कुछ हो? – ArtoAle

उत्तर

22

आप इसका परीक्षण नहीं करते हैं। यूनिट परीक्षण ब्लैक बॉक्स परीक्षण है। इसका मतलब है कि एकमात्र चीज जो आप परीक्षण करते हैं वह सार्वजनिक इंटरफेस उर्फ ​​अनुबंध है।

इन जैसे निजी कार्य केवल सार्वजनिक लोगों को दोबारा करने से हो सकते हैं।

तो यदि आप परिणामस्वरूप टीडीडी का उपयोग करते हैं तो आपके निजी कार्यों का पूरी तरह से परीक्षण किया जाता है।

यदि यह गलत लगता है तो यह अक्सर होता है क्योंकि आपकी संरचना गलत है। फिर आपको अपनी निजी सामग्री को एक अतिरिक्त मॉड्यूल में ले जाने के बारे में सोचना चाहिए।

+1

यही वह था जो मैं सोच रहा था (और अन्य के लिए किया - और पुन: प्रयोज्य- कार्यों)। मैं इस बात से सहमत नहीं हूं कि वे केवल रिफैक्टरिंग से आ सकते हैं ... क्या जावा निजी विधि केवल जनता के रिफैक्टरिंग से बाहर आती है? मुझे ऐसा नहीं लगता ... वैसे भी, मुझे लगता है कि 'मॉड्यूल पर जाएं' रणनीति स्वीकार्य हो सकती है, मुझे केवल बंद होने वाली स्कोपिंग के बारे में संदेह है जो निर्भरता के पक्ष में खो गया है, जो मुझे यकीन नहीं है कि यह हमेशा होता है एक अच्छी बात – ArtoAle

+0

यदि आप टीडीडी के अनुसार कड़ाई से आगे बढ़ते हैं, यहां तक ​​कि जावा में भी प्रत्येक निजी विधि केवल एक (या अधिक) सार्वजनिक तरीकों के पुनर्विक्रय का परिणाम होगी। लेकिन वैसे भी, मुझे लगता है कि जाने का रास्ता है :-) –

+0

मुझे इस सख्त परिभाषा से अवगत नहीं था :) इस शब्द में, मुझे लगता है कि आप जवाब सही हैं। क्या आप मुझे कुछ लिंक बता सकते हैं जहां टीडीडी के बारे में इस तरह के ठीक 'कथन' को ढूंढना है? धन्यवाद – ArtoAle

8

के बाद से मैं परीक्षण (this SO answer एक अच्छा तर्क बनाता है) इकाई परीक्षण और TDD से परे एक उपयोगी उपकरण होने के लिए मिल जाए, मैं आपके जैसे मामलों में मदद करने के लिए एक NPM पैकेज बनाया: require-from

मॉड्यूल-file.js:

function helper(param) { 
    return param + someVar; 
} 

module.exports = function myModule(moduleParam) { 
    var someVar; 
    .... 
    .... 
    return { 
     doSomething: function (bar) { 
      .... 
      .... 
      var foo = helper(bar); 
      .... 
      .... 
     } 
    }; 
}; 
module.helperExports = helper; 

का आयात-file.js:

var requireFrom = require('require-from'); 
var helper = requireFrom('helperExports', './module-file')); 
var public = requireFrom('exports', './module-file')); // same as require('./module-file') 
+0

एमएमएम ...वास्तव में मेरा प्रश्न नहीं है :) मेरा मतलब है - मैं मानता हूं कि आपका उपकरण उपयोगी है क्योंकि यह "निजी" निर्यात से "सार्वजनिक" अलग है - लेकिन मेरा प्रश्न टीडीडी में इस स्थिति से कैसे संपर्क करना है इसके बारे में और अधिक था - मैं समझता हूं कि आप बंदर-पैच कर सकते हैं सब कुछ, मैं जानना चाहता था कि कोड लिखने और ईमानदार होने के बारे में कोई अच्छा अभ्यास है, परीक्षण के एकमात्र उद्देश्य के लिए स्पष्ट रूप से कुछ निर्यात करना कुछ ऐसा है जो मुझे वास्तव में पसंद नहीं है, क्योंकि मैं टीडीडी को इस बारे में अधिक मार्गदर्शन करता हूं कि कैसे बेहतर, अधिक पुन: प्रयोज्य कोड लिखें :) – ArtoAle

+0

सर्वोत्तम अभ्यास, पैटर्न की तरह, परिस्थितियों पर निर्भर करते हैं। डेवलपर को अभी भी व्यापार बंद करना और निर्णय का उपयोग करना है। यह देखते हुए कि एक स्थिर सार्वजनिक एपीआई बनाए रखने के लिए अलगाव में कार्यक्षमता की इकाइयों का परीक्षण करना और जो खुलासा हुआ है उसे कम करने के लिए मूल्यवान है, पुस्तकालय एक अलग मॉड्यूल में कोड निकालने का विकल्प प्रदान करता है। उदाहरण: निकाले गए कोड पर निर्भर होने के लिए संबंधित कोड को एक साथ रखना या अन्य मॉड्यूल के जोखिम से परहेज करना चाहते हैं (यह बड़ी टीमों में होता है)। तो अगर उत्तर अब आपके लिए उपयोगी नहीं है, तो यह भविष्य में या अन्य लोगों के लिए हो सकता है। – DEADB17

+0

बीटीडब्लू: इसमें कोई बंदर-पैचिंग शामिल नहीं है। तंत्र नियमित नोड निर्यात के समान है। – DEADB17