में टेस्ट सीम छिपाने के लिए सर्वोत्तम अभ्यास मैं यूनिट-परीक्षण के लिए कुछ सलाह ढूंढ रहा हूं जो उत्पादन कोड में "टेस्ट हुक" नहीं छोड़ता है।.NET यूनिट परीक्षण - रिलीज कोड
मान लीजिए कि मेरे पास एक स्थाई वर्ग (वीबी.नेट मॉड्यूल) है जिसका नाम विधिLogger है, जिसमें "शून्य लिखेंइन्ट्री (स्ट्रिंग संदेश)" विधि है जो कॉलिंग विधि और डिस्क पर लॉग फ़ाइल को संदेश लिखने का इरादा है। WriteEntry() का वास्तविक लक्ष्य यूनिट परीक्षण चलाने के लिए IMethodLogger के नकली कार्यान्वयन में बदल दिया जा सकता है, और सभी अन्य मामलों में इसे IMethodLogger के वास्तविक कार्यान्वयन को कॉल करना चाहिए।
यहाँ मैं क्या हो रहा कोसा गया है अब तक का एक मोटा-कट है, और मैं दृष्टिकोण की तरह है - लेकिन कुछ त्वरित परीक्षण में यह कुछ सवाल और संदेह को जन्म देती है:
[InternalAttributesVisibleTo("MethodLogger.Tests")]
internal static class MethodLogger
{
public void WriteEntry(string message)
{
LogWriter.WriteEntry(message);
}
private IMethodLogger LogWriter
{
get;
set;
}
#if DEBUG
internal void SetLogWriter(IMethodLogger logger)
{
LogWriter = logger;
}
#endif
}
यहाँ मेरी विशिष्ट प्रश्न है:
यह कसकर युगल परीक्षण DEBUG निर्माण के खिलाफ चलने के लिए जोड़ता है; जब मैं इकाई परीक्षण चलाता हूं हालांकि ऐसा लगता है कि यह विशेष रूप से डेब्यूग में परीक्षण के तहत असेंबली का पुनर्निर्माण नहीं करता है - क्या ऐसा करना संभव है?
- क्या मैं कभी भी एक गैर-डीबग बिल्ड के खिलाफ यूनिट परीक्षण चलाने के लिए चाहता हूं? मेरे सिर के ऊपर से मुझे कम मूल्य दिखाई देता है - लेकिन क्या होगा?
क्या मेरे लिए "डेबग" के बदले "पूर्व" जैसे कस्टम प्री-कंपाइलर ध्वज का उपयोग करना संभव होगा? मैं विजुअल स्टूडियो को के साथ हमेशा के साथ इस झंडे को फिर से बनाने के बारे में बताऊंगा कि यह सुनिश्चित करने के लिए कि मेरे हुक/सीम उपलब्ध हैं?
क्या आपने इसके लिए एओपी ढांचा माना है? पोस्टशर्प –
@ क्रिस एस: नहीं, यह वास्तव में मेरे लिए एक नया संक्षेप है - परिभाषाओं की एक त्वरित नज़र मुझे थोड़ा आईओसी (जो मैं भी बहुत हरा हूं) सोचता हूं। दोनों के बीच कोई विशेष भेद या मतभेद? – STW