हमारे परीक्षण डाटा बनाने के लिए, हम बिल्डर पैटर्न के निम्नलिखित भिन्नता का उपयोग (सरलीकृत उदाहरण!):किसी अन्य वर्ग के आधार पर कोड कैसे उत्पन्न करें?
नमूना वर्ग:
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
}
बिल्डर:
public class PersonBuilder
{
private string name;
private string country;
public PersonBuilder()
{
SetDefaultValues();
}
private void SetDefaultValues()
{
name = "TODO";
country = "TODO";
}
public Person Build()
{
return new Person
{
Name = name,
Country = country
};
}
public PersonBuilder WithName(string name)
{
this.name = name;
return this;
}
public PersonBuilder WithCountry(string country)
{
this.country = country;
return this;
}
}
नोट: उदाहरण का संदर्भ स्वयं प्रासंगिक नहीं है। यहां महत्वपूर्ण बात यह है कि उदाहरण में, व्यक्ति बिल्डर जैसे बिल्डर वर्ग पूरी तरह से इकाई वर्ग (व्यक्ति) को देखकर और उसी पैटर्न को लागू करके उत्पन्न किया जा सकता है - नीचे देखें।
अब कल्पना करें कि व्यक्ति वर्ग में 2 के बजाय 15 गुण हैं। यह बिल्डर वर्ग को लागू करने के लिए कुछ बंदरगाह लेगा, जबकि सैद्धांतिक रूप से, यह व्यक्तिगत रूप से व्यक्ति वर्ग से उत्पन्न हो सकता है। हम बिल्डर वर्ग को जल्दी से स्थापित करने के लिए कोड जनरेशन का उपयोग कर सकते हैं, और आवश्यकता होने पर बाद में कस्टम कोड जोड़ सकते हैं।
कोड जनरेशन प्रक्रिया को संदर्भ (व्यक्ति वर्ग के नाम और गुण) के बारे में अवगत होना होगा, इसलिए सरल टेक्स्ट-आधारित कोड जनरेशन या रेगेक्स जादू यहां सही महसूस नहीं करता है। एक समाधान जो गतिशील है, टेक्स्ट-आधारित नहीं है और अंदरूनी दृश्य स्टूडियो से जल्दी से ट्रिगर किया जा सकता है।
मैं इस तरह के परिदृश्यों के लिए कोड जनरेशन करने का सबसे अच्छा तरीका ढूंढ रहा हूं। प्रतिबिंब? Codesmith? टी 4 टेम्पलेट्स? मैक्रोज़ के साथ Resharper लाइव टेम्पलेट्स?
मैं आगे देख रहा हूँ कुछ महान जवाब :)
हम पहले से ही हमारे यूनिट परीक्षणों में बड़े पैमाने पर मॉकिंग का उपयोग करते हैं, लेकिन मैंने कभी इसके लिए मैक्स का उपयोग करने का विचार नहीं किया :)। मुझे लगता है कि यह इस विशेष समस्या को हल करने का एक शानदार तरीका होगा, लेकिन सामान्य प्रश्न नहीं, जिसमें केवल परीक्षणों की तुलना में व्यापक दायरा है। लेकिन वैसे भी इस जवाब के लिए बहुत बहुत धन्यवाद! –