5

मैं वर्तमान में कैसल विंडसर संस्करण 2.1 का उपयोग अपने कंटेनर के रूप में कर रहा हूं और इसके साथ पंजीकृत सेवाओं का उपयोग करके एकीकरण परीक्षण करना चाहता हूं।एनयूनीट एकीकरण परीक्षण और निर्भरता इंजेक्शन

वर्तमान में, मैं यह कर मेरी मेरी सेवा उदाहरण निकालते हैं और इस तरह के रूप में यह के खिलाफ अपने एकीकरण परीक्षण करने के लिए Common Service Locator का उपयोग कर:

var myService = ServiceLocator.Current.GetInstance<IMyService>(); 
// do stuff with myService 

मैं आदर्श रूप क्या करना चाहते हैं क्या मेरी सेवा निर्भरता में इंजेक्ट किया है मेरे NUnit परीक्षण स्थिरता स्वचालित रूप से। वसंत this functionality की पेशकश करता है, लेकिन मैं कैसल का उपयोग कर कुछ भी नहीं ढूंढ सकता।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

संपादित करें:

मुझे यकीन है कि हर कोई (वैध) है या नहीं, यह एक अच्छा विचार है पर अंक हैं हूँ, आइए बस मान लें कि यह इस परिदृश्य में है ... क्या कोई मुझे बता सकता है कि यह विंडसर का उपयोग करके पूरा किया जा सकता है?

+0

पर अधिक जानकारी प्राप्त कर सकते हैं आपकी सेवाओं को यूनिट परीक्षण के लिए आवश्यक हैं? क्या आपने मोक, या राइनोमोक्स, या एनएमॉक जैसे नकली ढांचे का उपयोग करने की कोशिश की है? यदि आप वास्तव में एक घटक और सेवा के बीच * एकीकरण * का परीक्षण कर रहे हैं, तो बस आवश्यकतानुसार कई कैसल कॉन्फ़िगरेशन फ़ाइलें बनाएं और उन्हें अपने सादे या कस्टम कैसल कंटेनर –

+2

@johnny g में XmlConfigurator के साथ लोड करें: मैं इंटेग्रेशन परीक्षण कर रहा हूं; जिसका अर्थ है कि मैं मॉक्स का उपयोग नहीं करना चाहता, बल्कि वास्तविक सेवाओं को उनके सभी वास्तविक निर्भरताओं के साथ बनाना चाहता हूं।जैसा कि आपने सुझाव दिया है, मैं अपने यूनिट परीक्षण फिक्स्चर में मॉकिंग का उपयोग करता हूं। – DanP

+0

ईईपी! यह शर्मनाक है - NUnit पढ़ें और अचानक "देखा" इकाई परीक्षण हर जगह, जब स्पष्ट रूप से आप एकीकरण के बारे में काफी स्पष्ट हैं :) –

उत्तर

5

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

आप एक एकीकरण परीक्षण करना चाहते हैं, तो बस, एक नए कंटेनर इंस्टेंस बनाएं जोड़ने जो कुछ घटकों की जरूरत है, और चलाने के जो भी आप परीक्षण करना चाहते हैं जैसे:

[Test] 
public void TestComponentThatDependsOnA() { 
    var container = new WindsorContainer(); 
    container.Register(Component.For<MyComponentA>()); 
    container.Register(Component.For<ComponentThatDependsOnA>()); 
    var a = container.Resolve<ComponentThatDependsOnA>(); 
    var result = a.DoSomething(); 
    Assert.AreEqual("ok", result); 
} 

आप पंजीकरण बड़े करीने में लिपटे है installers (जैसा कि आपको करना चाहिए) आप उन्हें अपने परीक्षणों में पुन: उपयोग कर सकते हैं, परीक्षणों को और संक्षिप्त बना सकते हैं।

यदि आपके पास XML कॉन्फ़िगरेशन है, तो आप इसे आसानी से कॉन्फ़िगरेशन.फ्रोमैक्सफाइल() से लोड कर सकते हैं।

इसके अलावा, यहां सामान्य सेवा लोकेटर का उपयोग करने की आवश्यकता नहीं है।

कुछ एकीकरण परीक्षणों के लिए भी उपयोगी एक auto-mocking container है, जो स्वचालित रूप से सेवाओं को नकल कर देगा (जब तक कि आप उन्हें कंक्रीट वाले लोगों के साथ ओवरराइड नहीं करते)।

+1

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

+0

संदर्भ के लिए, मैं अपनी निर्भरताओं को तारित करने के लिए इन पंक्तियों के साथ कुछ उपयोग कर रहा हूं: http://fabiomaulo.blogspot.com/2009/11/guywire.html – DanP

0

मुझे लगता है कि आप इसे कैसल के साथ भी कर सकते हैं। विंडसर इंस्टालर एक सामान्य इंटरफ़ेस है जिसका उपयोग आपके कंटेनर/रजिस्टर घटकों को intialize करने के लिए किया जा सकता है। आप तब इस इंटरफ़ेस को कई बार कॉन्फ़िगर कर सकते हैं जब आपको उस संदर्भ के आधार पर आवश्यकता होती है जिसमें आवेदन निष्पादित करता है, आपके पास एक इंस्टॉलर हो सकता है जो उत्पादन संदर्भ में वास्तविक वस्तुओं को इंजेक्ट करता है और एक अन्य इंस्टॉलर जो एकीकरण परीक्षण के लिए नकली ऑब्जेक्ट/टेस्ट डबल्स इंजेक्ट करता है ।

आप http://docs.castleproject.org/Windsor.Installers.ashx

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