मैं यह कहकर शुरू करूंगा कि मैं यूनिट परीक्षण के लिए काफी नया हूं और मैं एक टीडीडी दृष्टिकोण का उपयोग शुरू करना चाहता हूं, लेकिन अब कुछ मौजूदा वर्गों के लिए यूनिट परीक्षण लिख रहा हूं ताकि सभी मामलों में उनकी कार्यक्षमता को सत्यापित किया जा सके।परीक्षण के तहत कक्षा के भीतर एक विधि का परीक्षण कैसे किया जाए?
मैं बिना किसी परेशानी के न्यूटिट और राइनो मैक्स का उपयोग करके अपने अधिकांश कोड का परीक्षण करने में सक्षम हूं। हालांकि, मैं यूनिट परीक्षण कार्यों के बारे में सोच रहा हूं जो एक ही कक्षा के भीतर कई अन्य तरीकों को बुलाते हैं। मैं
classUnderTest.AssertWasCalled(cut => cut.SomeMethod(someArgs))
जैसे कुछ नहीं कर सकता क्योंकि परीक्षण के तहत कक्षा नकली नहीं है। इसके अलावा, यदि मैं जिस विधि का परीक्षण कर रहा हूं, वह परीक्षण के तहत कक्षा में अन्य विधियों को कॉल करता है जो बदले में उसी वर्ग में कॉल विधियों को कॉल करता है, तो मुझे "शीर्ष स्तर" विधि का परीक्षण करने के लिए मूल्यों का एक टन नकली करने की आवश्यकता होगी। चूंकि मैं इन सभी "सब विधियों" का परीक्षण भी कर रहा हूं, इसलिए मुझे यह मानने में सक्षम होना चाहिए कि "कुछ विधि" अपेक्षा के अनुसार काम करता है यदि यह इकाई परीक्षण पास करता है और उन निम्न-स्तरीय तरीकों के विवरण के बारे में चिंता करने की आवश्यकता नहीं है।
public DataSet ExportExcelDocToDataSet(bool headerRowProvided)
{
DataSet ds = new DataSet();
for (int i = 0; i < currentWorkbook.NumberOfSheets; i++)
{
ISheet tmpSheet = currentWorkbook.GetSheetAt(i);
if (tmpSheet.PhysicalNumberOfRows == 0) { continue; }
DataTable dt = GetDataTableFromExcelSheet(headerRowProvided, ds, tmpSheet);
if (dt.Rows.Count > 0)
{
AddNonEmptyTableToDataSet(ds, dt);
}
}
return ds;
}
public DataTable GetDataTableFromExcelSheet(bool headerRowProvided, DataSet ds, ISheet tmpSheet)
{
DataTable dt = new DataTable();
for (int sheetRowIndex = 0; sheetRowIndex <= tmpSheet.LastRowNum; sheetRowIndex++)
{
DataRow dataRow = GetDataRowFromExcelRow(dt, tmpSheet, headerRowProvided, sheetRowIndex);
if (dataRow != null && dataRow.ItemArray.Count<object>(obj => obj != DBNull.Value) > 0)
{
dt.Rows.Add(dataRow);
}
}
return dt;
}
...
आप देख सकते हैं:
यहाँ कुछ उदाहरण कोड मैं मदद करने के लिए मेरी बात को वर्णन के साथ काम कर रहा है (मैं NPOI का उपयोग कर Excel फ़ाइलों के आयात/निर्यात प्रबंधन करने के लिए एक वर्ग लिखा है) ExportExcelDocToDataSet (मेरी "उच्च-स्तरीय" इस मामले में विधि) GetDataTableFromExcelSheet जो GetDataRowFromExcelRow, जो अन्य तरीकों कि यह वही वर्ग के भीतर परिभाषित कर रहे हैं के एक जोड़े कॉल कॉल कहते हैं।
तो इस कोड को पुन: सक्रिय करने के लिए अनुशंसित रणनीति क्या है, इसे सबमिशन द्वारा बुलाए गए मूल्यों को बिना स्टब किए बिना अधिक यूनिट टेस्टेबल बनाने के लिए? परीक्षण के तहत कक्षा के भीतर नकली विधि कॉल करने का कोई तरीका है?
किसी भी मदद या सलाह के लिए अग्रिम धन्यवाद!
मैंने अलग-अलग वर्गों में आपके द्वारा वर्णित विधियों को निकालने का विचार किया था, इसलिए मैं एंटर्टवास कॉलेड एक्सटेंशन का उपयोग करके यूनिट का परीक्षण कर सकता था, लेकिन मुझे यकीन नहीं था कि यह एक अच्छा विचार था क्योंकि मैं देख सकता था कि बहुत उथले वर्गों के टन उनमें से एक या दो तरीकों में सबसे अधिक। मैं निश्चित रूप से आपके द्वारा अनुशंसित पुस्तक और एसआरपी के बारे में और अधिक जानकारी दूंगा। इस सब के बारे में सबसे अच्छी बात यह है कि मैं प्रोजेक्ट पर एकमात्र व्यक्ति हूं और सभी कोड मेरे द्वारा लिखे गए हैं, इसलिए मैं इसे काम करने के लिए जो कुछ भी कर सकता हूं वह कर सकता हूं। –
@ गैज ट्रेडर: विधियों की संख्या के मामले में कक्षा को मापें मत। उदाहरण के लिए कमांड पैटर्न केवल एक विधि का खुलासा करता है और अभी भी एक विस्तृत तकनीक है। यूनिट परीक्षण और अच्छे ओओ डिजाइन सिद्धांतों को लागू करने से पहले, मैं कक्षाओं की उच्च संख्या के साथ सहज नहीं था। मुझे यह महसूस करने में कुछ समय लगा कि कक्षाओं की एक बड़ी संख्या का मतलब अधिक काम नहीं है। हां, यह सच है कि आपको डिज़ाइन और परीक्षण के लिए अधिक समय चाहिए, लेकिन उच्च गुणवत्ता और निचली बग गिनती इसे अब तक क्षतिपूर्ति करती है। –