मेरे पास एक एमवीसी वेब ऐप है, और मैं DI के लिए सरल इंजेक्टर का उपयोग कर रहा हूं। लगभग सभी मेरे कोड यूनिट परीक्षणों द्वारा कवर किया गया है। हालांकि, अब मैंने कुछ नियंत्रकों में कुछ टेलीमेट्री कॉल जोड़े हैं, मुझे निर्भरताओं को स्थापित करने में समस्या हो रही है।यूनिट टेस्ट के साथ आवेदन अंतर्दृष्टि का उपयोग करना?
टेलीमेट्री कॉल माइक्रोसॉफ्ट एज़ूर-होस्टेड एप्लिकेशन इनसाइट्स सेवा में मीट्रिक भेजने के लिए हैं। ऐप Azure में नहीं चल रहा है, बस आईएसएस के साथ एक सर्वर। एआई पोर्टल आपको आपके आवेदन के बारे में सभी प्रकार की चीजें बताता है, जिसमें टेलीमेट्री लाइब्रेरी का उपयोग करके आपके द्वारा भेजे जाने वाले किसी भी कस्टम ईवेंट शामिल हैं। नतीजतन, नियंत्रक को माइक्रोसॉफ्ट के एक उदाहरण की आवश्यकता होती है। अनुप्रयोग Insights.TelemetryClient, जिसमें इंटरफेस नहीं है और 2 कन्स्ट्रक्टर के साथ एक सीलबंद वर्ग है। मैं यह इसलिए की तरह दर्ज की कोशिश की (संकर जीवन शैली इस सवाल से संबंधित नहीं है, मैं सिर्फ पूर्णता के लिए यह शामिल है):
// hybrid lifestyle that gives precedence to web api request scope
var requestOrTransientLifestyle = Lifestyle.CreateHybrid(
() => HttpContext.Current != null,
new WebRequestLifestyle(),
Lifestyle.Transient);
container.Register<TelemetryClient>(requestOrTransientLifestyle);
समस्या यह है कि जब से TelemetryClient 2 कंस्ट्रक्टर्स है, एसआई की शिकायत है और सत्यापन विफल हो जाता है। मुझे एक पोस्ट मिला जिसमें कंटेनर के कन्स्ट्रक्टर रिज़ॉल्यूशन व्यवहार को ओवरराइड करना है, लेकिन यह बहुत जटिल लगता है। सबसे पहले मैं बैक अप लेना चाहता था और इस सवाल से पूछना चाहता था:
यदि मैं टेलीमेट्री क्लाइंट को इंजेक्शन निर्भरता नहीं बनाता (केवल कक्षा में नया खाता बनाएं), तो वह टेलीमेट्री इकाई के प्रत्येक भाग पर एज़ूर को भेजी जाएगी परीक्षण, बहुत सारे झूठे डेटा बनाते हैं? या एप्लिकेशन अंतर्दृष्टि पर्याप्त समझने के लिए पर्याप्त है कि यह एक यूनिट परीक्षण में चल रहा है, और डेटा नहीं भेज रहा है?
इस मुद्दे में कोई भी "अंतर्दृष्टि" बहुत सराहना की जाएगी!
धन्यवाद
मैं सवाल का ऐ पक्ष के साथ मदद नहीं कर सकता लेकिन पंजीकरण करके किया जा सकता है एक प्रतिनिधि को पंजीकृत करना जो एक विशिष्ट कन्स्ट्रक्टर को लक्षित करता है: 'कंटेनर। रजिस्ट्रार (() => नया टेलीमेट्री क्लाइंट (/ * जो भी कन्स्ट्रक्टर आप लक्षित करना चाहते हैं * /), requestOrTransientLifestyle);'। इसके अलावा [डिफॉल्टस्कोप्ड लाइफस्टाइल] (https://simpleinjector.readthedocs.org/en/latest/lifetimes.html#scoped) – qujck
यूनिट परीक्षण के लिए आपको वास्तव में टेलीमेट्री क्लाइंट पर अपने स्वयं के अमूर्तता को परिभाषित करना चाहिए जिसे आप आवश्यकतानुसार नकल कर सकते हैं। यूनिट परीक्षण Azure से बात नहीं करनी चाहिए। – qujck
आपका कस्टम हाइब्रिड स्कोप मुझे चिंतित करता है। एक क्षणिक जीवनशैली के साथ वेब अनुरोध जीवनशैली को मिलाकर आमतौर पर एक अच्छा अभ्यास नहीं होता है। यह समझा सकता है कि आपको इस मिश्रित जीवनशैली की आवश्यकता क्यों है? – Steven