परीक्षण स्थिर विधि किसी भी अन्य विधि का परीक्षण कर से अलग नहीं है एक और परीक्षण किया मॉड्यूल के अंदर एक निर्भरता के रूप में स्थिर विधि कोई समस्या को जन्म देती है (।। जैसा कि इसका उल्लेख किया गया है - आप इसे मुक्त टूल के साथ नकल नहीं कर सकते हैं)। लेकिन यदि स्थिर विधि स्वयं इकाई परीक्षण है तो आप आसानी से treat it as working, reliable component कर सकते हैं।
कुल मिलाकर, कुछ भी गलत नहीं है (जैसा कि, यह बाधित नहीं होता है यूनिट परीक्षण/टीडीडी) स्थिर विधियों के साथ:
- यह आसान है, इनपुट-आउटपुट विधि (के सभी प्रकार "की गणना इस देखते हुए कि")
- यह विश्वसनीय है, हमारा मतलब यह है कि यह या तो है इकाई आप द्वारा परीक्षण द्वारा या आप विश्वसनीय पर विचार 3 पार्टी स्रोत से आता है (जैसे।
Math.Floor
विश्वसनीय माना जा सकता है - इसका उपयोग करके नहीं बढ़ाया जाना चाहिए "देखो, यह स्थिर है!" चेतावनी; कोई मान सकता है कि माइक्रोसॉफ्ट इसका काम करता है)
जब स्थिर तरीके समस्याएं पैदा होंगी और इससे बचा जाना चाहिए?मूल रूप से केवल जब वे/के साथ बातचीत में कुछ कर आप नियंत्रित कर सकते हैं (या नकली):
अंदर से बुलाया
- अन्य (संभवतः अधिक जटिल) स्थिर तरीकों फाइल सिस्टम, डेटाबेस, नेटवर्क निर्भरता के सभी प्रकार के
- काफी कुछ भी अपने मजाक ढांचे नियमित शर्तों
पर के साथ सौदा नहीं कर सकते
संपादित करें:दो उदाहरण पर जब स्थिर विधि मेकअप इकाई परीक्षण कठिन
public int ExtractSumFromReport(string reportPath)
{
var reportFile = File.ReadAllText(reportPath);
// ...
}
कैसे आप File.ReadAllText
के साथ सौदा करते होंगे? यह स्पष्ट रूप से फ़ाइल सामग्री को पुनर्प्राप्त करने के लिए फ़ाइल सिस्टम पर जाएगा, जो यूनिट परीक्षण के दौरान प्रमुख नो-नो है। यह बाह्य निर्भरता के साथ स्थैतिक विधि का उदाहरण है। इससे बचने के लिए, आप आम तौर पर फाइल सिस्टम एपीआई के आसपास रैपर बनाते हैं या बस इसे निर्भरता/प्रतिनिधि के रूप में इंजेक्ट करते हैं।
public void SaveUser(User user)
{
var session = SessionFactory.CreateSession();
// ...
}
इस बारे में क्या? सत्र गैर-तुच्छ निर्भरता है। निश्चित रूप से, यह ISession
के रूप में आ सकता है, लेकिन नकली वापसी के लिए SessionFactory
को कैसे बल दें? हम नहीं कर सकते और हम सत्र ऑब्जेक्ट को तोड़ने में आसान नहीं बना सकते हैं।
ऊपर तरह के मामलों में, यह स्थिर तरीकों को पूरी तरह से बचने के लिए सबसे अच्छा है।
स्रोत
2012-05-17 09:35:07
के लिए उपलब्ध होता है जब स्थिर विधि गणना करता है, और आप इसका नकल नहीं कर सकते हैं? क्या इसे उदाहरण विधि बनाने की आवश्यकता है? – Pingpong
@ पिंगपोंग: क्या आप थोड़ा विस्तार कर सकते हैं? 'Math.Floor' गणना करता है - क्या हम इसे नकली करते हैं? नहीं, क्योंकि हम जानते हैं कि 'Math.Floor (2.5)' वापस आ जाएगा 2. जब इनपुट-आउटपुट ** निर्धारित करने में आसान ** ** आपको कुछ भी नकल करने की आवश्यकता नहीं है (या उदाहरण का उपयोग करें)। पूरी * स्थिर विधि परीक्षण को कठिन बनाता है * जब वे गैर-तुच्छ निर्भरता प्रदान करते हैं या साइड इफेक्ट्स होते हैं तो वे परिस्थितियों से आते हैं। मेरा संपादन देखें। –
स्थैतिक विधि के बारे में क्या एक कस्टम विधि है जो लंबी प्रक्रिया कैलक्यूशन करती है? – Pingpong