नियंत्रकों के लिए सही समूह का पता लगाने के लिए, परीक्षण के बारे में सोचें ।
(यहां तक कि अगर आप वास्तव में कोई परीक्षण नहीं करते हैं, तो यह सोचकर कि आप अपने नियंत्रकों के परीक्षण के बारे में कैसे जाएंगे, आपको उन्हें संरचना के बारे में कुछ बहुत अच्छी अंतर्दृष्टि प्रदान करेगा।)
एक AuthenticationControllerअपने आप से परीक्षण करने योग्य नहीं है, क्योंकि इसमें केवल लॉग इन करने और लॉग आउट करने के लिए कार्यक्षमता है, लेकिन आपके परीक्षण कोड को किसी सफल लॉगिन का परीक्षण करने से पहले परीक्षण के प्रयोजनों के लिए नकली खाते बनाने की आवश्यकता होगी। आप सबसिस्टम-अंडर-टेस्ट को बायपास कर सकते हैं और परीक्षण खातों के निर्माण के लिए सीधे अपने मॉडल पर जा सकते हैं, लेकिन फिर आपके हाथों में एक नाजुक परीक्षण होगा: यदि मॉडल बदलता है, तो आपको न केवल कोड को संशोधित करना होगा, जो परीक्षण करता है मॉडल, लेकिन यह भी कोड जो नियंत्रक का परीक्षण करता है, भले ही नियंत्रक का इंटरफ़ेस और व्यवहार अपरिवर्तित रहा हो। यह अनुचित है।
ए LoginControllerउन कारणों के लिए अनुपयुक्त है: आप पहले खातों को बनाए बिना इसका परीक्षण नहीं कर सकते हैं, और भी अधिक चीजें हैं जो आप परीक्षण नहीं कर सकते हैं, उदाहरण के लिए डुप्लिकेट लॉगिन को रोकने के लिए लेकिन फिर लॉग आउट होने के बाद उपयोगकर्ता को लॉगिन करने की अनुमति देता है। (चूंकि इस नियंत्रक की कोई लॉगआउट कार्यक्षमता नहीं है।)
एक AccountControllerसब कुछ आप क्रम में की जरूरत है आप दे देंगे अपने परीक्षण करें: यदि आप एक परीक्षण खाता बनाने और फिर लॉगिन करने के लिए कोशिश कर सकते हैं, तो आप खाता हटा सकते हैं और उसके बाद सुनिश्चित करें कि आप नहीं लॉगिन अब, आप पासवर्ड बदल दें और यह सुनिश्चित करें कि कर सकते हैं कर सकते हैं लॉगिन आदि के लिए राइट पासवर्ड का इस्तेमाल करना पड़ता है।
निष्कर्ष निकालने के लिए: यहां तक कि सबसे छोटे परीक्षण सूट को लिखने के लिए, आपको AccountControllerइसे उपलब्ध सभी की कार्यक्षमता बनाने की आवश्यकता होगी । छोटे नियंत्रकों के लिए इसे उप-विभाजित करना उचित परीक्षण के लिए अपर्याप्त कार्यक्षमता के साथ विकलांग नियंत्रकों को उत्पन्न करता प्रतीत होता है। यह एक बहुत अच्छा संकेत है कि कार्यक्षमता AccountControllerसबसे छोटी उपखंड है जो समझ में आता है।
और आम तौर पर, "परीक्षण के बारे में सोचें" दृष्टिकोण न केवल इस विशेष परिदृश्य में काम करेगा, बल्कि भविष्य में आपके सामने आने वाले किसी भी समान परिदृश्य में भी काम करेगा।