2012-03-28 31 views
12

को दबाकर हमारे पास एक एन-स्तरीय वेब एप्लिकेशन है जो SQL सर्वर से डेटा खींचता है। हमारा डेटा एक्सेस तर्क एक SqlDataReader देता है जिसका डेटा तब हमारे व्यापार ऑब्जेक्ट्स (ए.के.ए. डेटा ट्रांसफर ऑब्जेक्ट्स) बनाने के लिए उपयोग किया जाता है।यूनिट परीक्षण - एक SqlDataReader

हम अपने कोड ऑब्जेक्ट्स बनाने के लिए इन एसक्लडाटा रीडर ऑब्जेक्ट्स द्वारा लौटाए गए डेटा को समझने वाले हमारे कोड को जांचने के लिए यूनिट परीक्षण बनाना चाहते हैं।

इसलिए यूनिट परीक्षण के दौरान SqlDataReader ऑब्जेक्ट्स को प्रतिस्थापित करने के लिए स्टब्स बनाने के लिए आवश्यक लगता है। जैसा कि संभवतः काफी विशिष्ट है, हमारी एसक्लडाटा रीडर ऑब्जेक्ट आम तौर पर कई पंक्तियों के साथ एकाधिक रिकॉर्डसेट लौटाती है।

  1. क्या यह एक समझदार प्रयास है?
  2. इन स्टब ऑब्जेक्ट्स के निर्माण के बारे में हमें कैसे जाना चाहिए?

अग्रिम में बहुत धन्यवाद

Griff

उत्तर

24

स्वचालित परीक्षण मूल रूप से हमेशा एक समझदार प्रयास :)

आपका पहला कदम परीक्षण करने के लिए यह आपका डेटा एक्सेस तर्क वापसी है सक्षम होने के लिए है SqlDataReader - SqlDataReader लागू करने के बजाय IDataReaderIDataReader लागू करता है, इसलिए कोई समस्या नहीं है।

अपने इकाई परीक्षण आप तो मैन्युअल रूप से बनाने और DataTable वस्तुओं को पॉप्युलेट कर सकते हैं और dataTable.CreateDataReader() फोन एक IDataReader परीक्षण के अंतर्गत वस्तु में पारित करने के लिए प्राप्त करने के लिए

संपादित

नमूना डेटा का एक सेट के साथ अपने परीक्षण प्रदान करने के लिए, मैं, आप का उपयोग प्रत्येक डेटा तालिका के लिए एक ObjectMother उपयोग करने का सुझाव था एक समर्पित जगह में डेटा तालिकाओं के निर्माण रखते हुए। फिर आप दृढ़ता से टाइप किए गए तरीके से कुछ डेटा अपडेट करने के लिए प्रत्येक ObjectMethod कक्षा पर विधियां डाल सकते हैं। उदाहरण के लिए:

IDataReader customerDetailsReader = new PersonalDetailsBuilder() 
    .CreateNewTable() 
    .AddStandardData() 
    .AddRow(17, "Customer 17") 
    .ToDataReader(); 
+0

कल्पना कीजिए कि हमारे IDataReader वस्तुओं में से एक की ओर से एक ग्राहक के बारे में विवरण:

public class PersonalDetailsBuilder { private DataTable _dataTable; public PersonalDetailsBuilder CreateNewTable() { this._dataTable = new DataTable("CustomerPersonalDetails") { Columns = new[] { new DataColumn("CustomerId", typeof(int)), new DataColumn("CustomerName", typeof(string)) } }; return this; } public PersonalDetailsBuilder AddStandardData(int numberOfRows = 3) { foreach (int i in Enumerable.Range(1, numberOfRows + 1)) { this.AddRow(i, "Customer " + i); } return this; } public PersonalDetailsBuilder AddRow(int customerId, string customerName) { this._dataTable.Rows.Add(customerId, customerName); return this; } public IDataReader ToDataReader() { return this._dataTable.CreateDataReader(); } } 

... जो आप तो इस तरह इस्तेमाल कर सकते हैं एक डेटा पाठक पाने के लिए RS1 = व्यक्तिगत विवरण; rs2 = अनुमतियां; rs3 - xxx आदि। अधिकांश परीक्षण डेटा के डिफ़ॉल्ट सेट के रूप में इसका उपयोग करेंगे। कुछ परीक्षण इन मानों में से अधिकांश का उपयोग करना चाहते हैं, लेकिन डेटाटेबल्स में कुछ गुणों को ओवरराइड कर सकते हैं। वह कितना आसान है? लगभग विरासत की तरह .... – DrGriff

+0

मुझे यकीन नहीं है कि मैं समझता हूं - क्या आपका मतलब एकाधिक परिणाम सेट, या डेटा पाठकों का एक सेट के लिए एक डेटा रीडर है? किसी भी मामले में, मैंने अपना जवाब अपडेट कर लिया है। –

+0

डाउनवोट क्यों? किसी को...? –