2013-07-26 12 views
12

के साथ निजी विधि इकाई परीक्षण मैं जैस्मीन का उपयोग करके एक कोणीय अनुप्रयोग के लिए टेस्ट केस कोडिंग कर रहा था। लेकिन कई आंतरिक तरीकों को सेवाओं में निजी के रूप में घोषित किया जाता है।जैस्मीन

उदाहरण:

App.service('productDisplay', function(){ 
    var myPrivate = function(){ 
     //do sth 
    } 
    this.doOfferCal = function(product, date){ 
     //call myPrivate 
     //do sth too 
     return offer; 
    } 
}); 

चमेली यह सीधा "doOfferCal" के लिए कोड परीक्षण करने के लिए उपयोग करना, लेकिन मैं myPrivate के लिए इकाई परीक्षण भी लिखना चाहते हैं।

मैं यह कैसे कर सकता हूं?

अग्रिम धन्यवाद।

+0

संभावित डुप्लिकेट [मैं कैसे करूँ एक ऐसे वर्ग का परीक्षण करें जिसमें निजी तरीके, फ़ील्ड या आंतरिक कक्षाएं हों?] (https://stackoverflow.com/questions/34571/how-do-i-test-a-class-that-has-private-methods-fields-or -इनर-क्लास) – Raedwald

उत्तर

0

आंतरिक कार्यों का परीक्षण करने के लिए मैं बाहरी फ़ंक्शन को कॉल करता हूं जो आंतरिक फ़ंक्शन को कॉल करता है और उसके बाद आंतरिक इनपुट की आवश्यकता के अनुसार मेरा इनपुट बदलता है। इसलिए, आपके मामले में आप 'productDisplay' को कॉल करेंगे और 'myPrivate' की ज़रूरतों के आधार पर आपके इनपुट को बदल देंगे और फिर सत्यापित करेंगे कि आपके पास अपेक्षित आउटपुट है। आप 'myPrivate' पर भी जासूसी कर सकते हैं और इस तरह से परीक्षण कर सकते हैं। Havebeencalledwith या .andcallthrough।

8

क्या कोई विशिष्ट कारण है कि आप अपने निजी तरीकों का परीक्षण करना चाहते हैं?

doOfferCal() का परीक्षण करके, आप पूरी तरह से परीक्षण कर रहे हैं कि myPrivate() सही काम कर रहा है।

हालांकि यह RailsConf के लिए है, Sandi Metz what should be tested पर एक बहुत अच्छी बात है।

+0

मेरा "डूऑफरकल" कई निजी तरीकों को बुला रहा है और अंत में एक जटिल परिणाम लौटा रहा है क्योंकि क्यों सोचा कि प्रत्येक निजी तरीकों का परीक्षण करना अच्छा होगा। वैसे भी इस स्थिति में आपके पास कोई सुझाव है? – arnold

+2

विचार का एक स्कूल यह है कि निजी तरीके कार्यान्वयन के विवरण हैं। अपनी निजी विधियों का परीक्षण करके, आपका परीक्षण तब भी टूट जाएगा जब आपकी सार्वजनिक विधि अभी भी सही तरीके से कार्य कर रही है। नतीजतन, आप ऐसे परीक्षण तैयार कर सकते हैं जो बहुत भंगुर हैं और डेवलपर्स को कार्यान्वयन में सुधार/पुन: सक्रिय करने से डरते हैं। – achan

+2

क्षमा करें, मुझे एहसास नहीं हुआ कि एंटर दबाएगा मेरी पोस्ट सबमिट करेगा .. इस मामले में मैं क्या करूँगा 'doOfferCal()' का परीक्षण करें और फिर उस जटिल ऑब्जेक्ट को सत्यापित करें जो इसे लौटाता है। यदि वह परीक्षा उत्तीर्ण होती है, तो बीच में सभी निजी विधियां इरादे से काम कर रही हैं। मुझे यकीन है कि आप लोगों को निजी तरीकों के समर्थन में पाएंगे, लेकिन यह वही है जो मुझे उपयोगी और रखरखाव इकाई परीक्षण लिखने के संदर्भ में मेरे लिए सबसे अच्छा काम करता है। – achan

2

अचन 100% सही है, लेकिन आप से यह कर सकते हैं यदि आप वास्तव में अपने परीक्षण में निजी विधि कॉल करने के (क्या कभी नहीं :-) होना चाहिए) की जरूरत है:

var myPrivateSpy = spyOn(productDisplayService, "myPrivate").and.callThrough(); 
myPrivateSpy.call(); 
की