मैं कुछ कक्षाओं का परीक्षण करना चाहता हूं जो एएसपी.नेट वेब एपीआई परियोजना का हिस्सा हैं। मुझे टेस्टसेवर के माध्यम से अनुरोध-प्रतिक्रिया एकीकरण परीक्षण की आवश्यकता नहीं है (हालांकि वे अच्छे हैं) लेकिन मैं अपने परीक्षणों को यथासंभव "वास्तविक चीज़" के करीब रखना चाहता हूं। तो मैं स्टार्टअप में जोड़े गए सेवाओं का उपयोग करके अपनी कक्षाओं को हल करना चाहता हूं लेकिन परीक्षण के आधार पर उनमें से कुछ को स्टब्स/मैक्स द्वारा बदलना (कुछ परीक्षणों को मोक्स की जरूरत है, अन्य - नहीं)।मैं एएसपी.NET कोर परीक्षणों में सेवाओं को कैसे रोक सकता/सकती हूं
अच्छे पुराने दिनों में करना वास्तव में आसान था जब एएसपी.नेट में आंतरिक निर्भरता इंजेक्शन ढांचा नहीं था। तो मैं सिर्फ एक वर्ग को कॉल करता हूं जो सभी निर्भरताओं को एक कंटेनर में पंजीकृत करता है, फिर प्रत्येक परीक्षण के लिए बाल कंटेनर बनाते हैं, कुछ निर्भरताओं को मोक्स में बदलते हैं और यही वह है।
var host = A.Fake<IHostingEnvironment>();
var startup = new Startup(host);
var services = new ServiceCollection();
//Add stubs here
startup.ConfigureServices(services);
var provider = services.BuildServiceProvider();
provider.GetService<IClientsHandler>();
यह काम करने के लिए लगता है, लेकिन मैं हर परीक्षा के लिए पूरे स्टार्टअप बुनियादी ढांचा तैयार करने के लिए नहीं करना चाहती:
मैं कुछ इस तरह की कोशिश की। मैं इसे एक बार बनाना चाहता हूं और फिर प्रत्येक परीक्षण के लिए "बाल कंटेनर" या "बाल स्कोप" बनाना चाहता हूं। क्या यह संभव है? असल में मैं स्टार्टअप के बाहर सेवाओं को संशोधित करने का एक तरीका ढूंढ रहा हूं।
लेकिन मैं मैन्युअल रूप से मॉक किए गए इंटरफेस इंजेक्ट नहीं करना चाहता हूं। मैं सेवाओं का उपयोग कर कक्षा को हल करना चाहता हूं और मैं कक्षा को हल करने से पहले कुछ इंटरफेस के लिए मैक्स निर्दिष्ट करना चाहता हूं। – SiberianGuy
पूरा जवाब पढ़ें। अंतिम अनुच्छेद केवल यूनिट परीक्षण के लिए है, अधिकांश उत्तर एकीकरण परीक्षण करने के बारे में है और उन्हें कैसे किया जाना चाहिए। यही टेस्टसेवर है और इसके लिए स्टार्टअप का उपयोग किया जाता है। हालांकि आपको अनुरोध का उपयोग करने की आवश्यकता नहीं है, लेकिन जैसा कि दूसरे कोड उदाहरण में उल्लेख किया गया है, आप केवल परीक्षण सर्वर उदाहरण – Tseng
से IServiceProvider तक पहुंच सकते हैं, तो आप मानते हैं कि हमें प्रत्येक परीक्षण के लिए एक नया टेस्ट सर्वर बनाना चाहिए? मैं सिर्फ यह नहीं देखता कि मैं एक टेस्टसेवर कैसे बना सकता हूं और प्रत्येक परीक्षण के लिए निर्भरता बदल सकता हूं (कुछ परीक्षणों के लिए मुझे मोक्स चाहिए, दूसरों के लिए मैं नहीं करता)। – SiberianGuy