मैं अपने नवीनतम एएसपी.नेट एमवीसी प्रोजेक्ट का निर्माण करते समय यूनिट टेस्टिंग, निर्भरता इंजेक्शन और जैज़ में जा रहा हूं।आईओसी कंटेनर के बिना आप अपने नियंत्रकों को यूनिट का परीक्षण कैसे कर सकते हैं?
मैं अब उस बिंदु पर हूं जहां मैं अपने नियंत्रकों को यूनिट परीक्षण करना चाहता हूं और मुझे यह पता लगाने में कठिनाई हो रही है कि आईओसी कंटेनर के बिना उचित तरीके से ऐसा कैसे किया जाए। उदाहरण के लिए
लें एक सरल नियंत्रक:
public class QuestionsController : ControllerBase
{
private IQuestionsRepository _repository = new SqlQuestionsRepository();
// ... Continue with various controller actions
}
इस वर्ग SqlQuestionsRepository के अपने प्रत्यक्ष इन्स्टेन्शियशन की वजह से बहुत इकाई परीक्षण योग्य नहीं है। तो, निर्भरता इंजेक्शन मार्ग नीचे जाने दें और करें:
public class QuestionsController : ControllerBase
{
private IQuestionsRepository _repository;
public QuestionsController(IQuestionsRepository repository)
{
_repository = repository;
}
}
यह बेहतर लगता है। अब मैं आसानी से एक नकली IQuestionsRepository के साथ यूनिट परीक्षण लिख सकता हूं। हालांकि, अब नियंत्रक को तुरंत चालू करने जा रहा है क्या? कहीं भी कॉल चेन SqlQuestionRepository को तत्काल चालू किया जा रहा है। ऐसा लगता है कि मैंने बस कहीं और समस्या को स्थानांतरित कर दिया है, इससे छुटकारा नहीं मिला है।
अब, मुझे पता है कि यह एक अच्छा उदाहरण है जहां एक आईओसी कंटेनर मेरे लिए नियंत्रक निर्भरता को तारों में मदद कर सकता है जबकि साथ ही मेरे नियंत्रक को आसानी से इकाई परीक्षण योग्य रखता है।
मेरा सवाल यह है कि, इस प्रकृति की चीजों पर बिना आईओसी कंटेनर के यूनिट परीक्षण करने का अनुमान है?
नोट: मैं आईओसी कंटेनर का विरोध नहीं कर रहा हूं, और मैं जल्द ही उस सड़क पर जाउंगा। हालांकि, मैं उत्सुक हूं कि विकल्प उन लोगों के लिए क्या है जो उनका उपयोग नहीं करते हैं।
@ पीटर, बहुत अच्छा सुझाव। क्या आपको अपनी परियोजनाओं पर आईओसी कंटेनरों का उपयोग करने का कोई अनुभव है या क्या आपको अभी तक आवश्यकता नहीं मिली है? – mmcdole
मेरे पास बहुत अधिक .NET अनुभव नहीं है, मेरा अधिकांश काम स्प्रिंग फॉर आईओसी का उपयोग कर जावा के साथ है। यह मॉड्यूलरिटी में सुधार के लिए बहुत उपयोगी रहा है। – Peter
@ पीटर: यह काफी पैटर्न है जिसका मैं उपयोग करता हूं। मैंने एक उत्तर पोस्ट किया जो एक ही काम करता है, लेकिन कुछ सी # भाषा विशेषताओं का उपयोग करता है जो आप जावा लड़के होने के बारे में जानते हैं। –