मैं इतनी तरह मेरे स्वचालित परीक्षण में कैसल विंडसर उपयोग करने का प्रयास कर रहा हूँ में एक मौजूदा घटक पंजीकरण ओवरराइडकैसल विंडसर 3 में, एक इकाई परीक्षण
Setup()
समारोह एक बनाता है विंडसर कंटेनर, प्रत्येक घटक कीTest
समारोह अभिगम विधिIWindsorContainer.Resolve<T>
के माध्यम से घटकों, और डिफ़ॉल्ट कार्यान्वयन दर्ज की उनके व्यवहार का परीक्षण करती है- विंडसर कंटेनर केसमारोह disposes (और किसी भी बनाई गई घटकों)
उदाहरण के लिए, मैं 15 परीक्षण जो एक IMediaPlayerProxyFactory
घटक के निर्माण में घटक जो परोक्ष रूप से परिणाम तक पहुँचता है हो सकता है। SetUp
फ़ंक्शन एक अच्छा पर्याप्त कार्यान्वयन IMediaPlayerProxyFactory
पंजीकृत करता है, इसलिए मेरे पास 15 परीक्षणों में से प्रत्येक में इसे पंजीकृत करने का रखरखाव बोझ नहीं है।
हालांकि, अब मैं एक परीक्षण Test_MediaPlayerProxyFactoryThrowsException
लिख रहा हूं, मेरी प्रणाली की पुष्टि करने से IMediaPlayerProxyFactory
घटक से एक त्रुटि ठीक से संभालती है। परीक्षा पद्धति में मैं अपने विशेष नकली कार्यान्वयन बना लिया है, और अब मैं ढांचे को इसकी सुई हैं:
this.WindsorContainer.Register(
Component.For<IMediaPlayerProxyFactory>()
.Instance(mockMediaPlayerProxyFactory)
);
लेकिन विंडसर एक Castle.MicroKernel.ComponentRegistrationException
फेंकता है, संदेश के साथ "वहाँ उस नाम का एक घटक है। "
क्या कोई तरीका है कि मैं mockMediaPlayerProxyFactory
IMediaPlayerProxyFactory
के लिए डिफ़ॉल्ट उदाहरण हो सकता हूं, जो पहले से ही पंजीकृत है घटक को छोड़कर?
documentation के अनुसार, महल विंडसर 3 पंजीकरण ओवरराइड के लिए अनुमति देता है, लेकिन मैं केवल एक उदाहरण मिल सकता है:
Container.Register(
Classes.FromThisAssembly()
.BasedOn<IEmptyService>()
.WithService.Base()
.ConfigureFor<EmptyServiceA>(c => c.IsDefault()));
ConfigureFor
BasedOnDescriptor
वर्ग की एक विधि है। मेरे मामले में मैं FromDescriptor
या BasedOnDescriptor
का उपयोग नहीं कर रहा हूं।
नामकरण और 'आईएसडीफॉल्ट' विधि का आह्वान वास्तविक कार्यान्वयन पर आवश्यक नहीं है, इसके अलावा, बहुत अच्छा! – bevacqua
उत्तर अद्यतन करने के लिए धन्यवाद। –