2010-07-30 14 views
5

मैं, काम mocks करने के लिए एक बदलाव के लिए संघर्ष कर रहा हूँ, और सोच रहा था, जहां लोगों को आम तौर पर उनके नकली वर्गों डाल दिया। मुझे लगता है कि तीन बुनियादी विकल्प हैं जिनमें से कोई भी काम नहीं कर रहा है।मैं अपने मोजे कहां रखूं?

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

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

मैं उन्हें परीक्षण असेंबली में डाल सकता हूं, लेकिन फिर वे एप्लिकेशन से ही उपयोग नहीं कर पा रहे हैं और इसलिए मैं उन्हें एप्लिकेशन के हिस्सों के निर्माण के लिए प्रक्रिया के रूप में उपयोग नहीं कर सकता।

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

क्या किसी के पास कोई विचार है कि नकली कक्षाओं को कहाँ रखा जाना चाहिए? किसी भी मदद के लिए

धन्यवाद टी

+0

'InternalsVisibleTo' विधानसभा विशेषता में देखो; यह आपके विकल्पों में सुधार करेगा: http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx – Flynn1179

+0

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

+0

@Flynn मैं पहले से ही उस धन्यवाद का उपयोग कर रहा हूँ। @Tim - हो सकता है कि यह वह जगह है जहाँ मैं गलत जा रहा हूँ। यह मेरे सिस्टम को विकसित करने के लिए हमेशा कई परतों के माध्यम से हमेशा बात करने के लिए एक बड़ी शर्म की बात है जब मेरे पास इन महान मोक्सों का उपयोग करने का इंतजार है। क्या आपको लगता है कि आप अपने सिस्टम की सभी परतों को पहले से ही काम करने से पहले कोड कर चुके हैं? – Tollo

उत्तर

10

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

+1

तो आप अपने मिक्स का उपयोग कभी भी अपने आवेदन के साथ तेज करने और काम करने के लिए नहीं करेंगे? मैंने यूनिट टेस्ट प्रोजेक्ट में उन्हें शुरू करना शुरू कर दिया लेकिन यह बहुत बड़ा कचरा लग रहा था अगर मेरे आवेदन को हमेशा मेरे पीछे की ओर वापस बात करनी पड़ी, जबकि मेरे पास इन सभी पूरी तरह से काम करने वाले मैक्स थे जो इस्तेमाल होने के लिए रोते थे। – Tollo

+0

"तो आप अपने मिक्स का उपयोग कभी भी अपने आवेदन के साथ तेज करने और काम करने के लिए नहीं करेंगे?" नहीं; आवेदन के बाहर परीक्षण कोड रखें। चट्टानों के अलावा, आपके पास इकाई परीक्षण कोड भी है: क्या वह रोने के लिए रो रहा है? –

+0

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

0

हम अपनी परियोजनाओं पर क्या करते हैं आंतरिक और बाह्य निर्भरताओं की पहचान है। आंतरिक निर्भरता के लिए Mocks इकाई-परीक्षण परियोजना (या एक अलग Mocks परियोजना अगर वे समाधान भर में उपयोग किया जाता है) में चले जाते हैं। बाहरी निर्भरताओं के लिए मोक्स एप्लिकेशन में ही जाते हैं, और फिर तैनाती और एकीकरण परीक्षण के लिए उपयोग किए जाते हैं।

बाहरी निर्भरता कुछ ऐसा है जो पर्यावरणीय है - इसलिए, सक्रिय निर्देशिका, एक वेब सेवा, डेटाबेस, एक लॉगर, उस तरह की चीज़। निर्भरता इंजेक्शन उसी तरह से नियंत्रित किया जाता है - बाहरी निर्भरता एक विन्यास फाइल में परिभाषित करने के लिए, तो हम आसानी से चुन सकते हैं, जिसे हम रन-टाइम में उपयोग करना चाहते हैं।

एक आंतरिक निर्भरता काफी कुछ और है।

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