अवसाद प्रतिक्रिया में भारी है ... लेकिन डर नहीं है, हम the holy book to exorcise the demons of legacy C++ code मिल गया है। गंभीरता से बस पुस्तक खरीदें यदि आप लीगेसी सी ++ कोड के साथ जौस्टिंग के एक सप्ताह से अधिक समय तक लाइन में हैं।
पेज 127 को बारी: भयानक के मामले निर्भरता शामिल हैं। (अब मैं भी नहीं माइकल पंख के मील के दायरे में, लेकिन यहाँ जवाब के रूप में-कम के रूप में मैं-सकता है-का प्रबंधन कर रहा हूँ ..)
समस्या: C++ में एक ClassA ClassB, के बारे में पता करने की जरूरत है कक्षा बी के घोषणा क्लास की स्रोत फ़ाइल में सीधे उठाई गई/पाठ रूप से शामिल है। और चूंकि हम प्रोग्रामर इसे गलत चरम पर ले जाना पसंद करते हैं, इसलिए एक फ़ाइल दोबारा अन्य लोगों को पारस्परिक रूप से शामिल कर सकती है। बनाता है साल लगते हैं .. लेकिन कम से कम यह बनाता है .. हम इंतजार कर सकते हैं।
अब कहने के लिए 'एक परीक्षण दोहन के तहत ClassA instantiating मुश्किल है' एक ख़ामोश है। (हवाला देते हुए एमएफ के उदाहरण - समयबद्धक deps बहुतायत के साथ हमारे पोस्टर समस्या बच्चा है।)
#include "TestHarness.h"
#include "Scheduler.h"
TEST(create, Scheduler) // your fave C++ test framework macro
{
Scheduler scheduler("fred");
}
यह बाहर लाना होगा निर्माण त्रुटियों की बाढ़ के साथ अजगर भी शामिल है।
ब्लो # 1 धैर्य-एन-हठ: लो प्रत्येक एक समय में एक में शामिल हैं और अगर हम वास्तव में है कि निर्भरता की जरूरत है तय पर। आइए मान लें कि शेड्यूलर डिस्प्ले उनमें से एक है, जिसका डिस्प्ले एंट्री विधि शेड्यूलर के सीटीआर में बुलाया जाता है।
ब्लो # 2 नकली यह तक में आप मेकअप यह (धन्यवाद RonJ):
#include "TestHarness.h"
#include "Scheduler.h"
void SchedulerDisplay::displayEntry(const string& entryDescription) {}
TEST(create, Scheduler)
{
Scheduler scheduler("fred");
}
और पॉप निर्भरता चला जाता है और उसके सभी सकर्मक भी शामिल है। आप अपनी टेस्ट फाइलों में शामिल होने के लिए Fakes.h फ़ाइल में इसे एन्सेप्लेट करके नकली विधियों का पुन: उपयोग भी कर सकते हैं।
ब्लो # 3 अभ्यास: यह हमेशा इतना आसान नहीं हो सकता है .. लेकिन आप विचार मिलता है। पहले कुछ duels के बाद, deps तोड़ने की प्रक्रिया आसान-एन-यांत्रिक
चेतावनियां मिल जाएगा (मैं वहाँ चेतावनियां हैं उल्लेख किया था? :)
- हम में परीक्षण मामलों के लिए एक अलग निर्माण की जरूरत है यह फ़ाइल ; हमारे पास प्रोग्राम में शेड्यूलर डिस्प्ले :: displayEntry विधि के लिए केवल 1 परिभाषा हो सकती है।तो अनुसूचक परीक्षण के लिए एक अलग कार्यक्रम बना सकते हैं।
- हम कार्यक्रम में किसी भी निर्भरता को तोड़ने नहीं कर रहे हैं, तो हम कोड क्लीनर नहीं कर रहे हैं।
- जब तक हमें परीक्षण की आवश्यकता होती है तब तक आपको उन नकल को बनाए रखने की आवश्यकता होती है।
- सौंदर्यशास्त्र के अपने अर्थ थोड़ी देर के लिए नाराज हो सकते हैं .. बस
गंभीर निर्भरता मुद्दों के साथ एक बहुत ही बड़ा वर्ग के लिए इस तकनीक का प्रयोग करें 'एक बेहतर कल के लिए हमारे साथ भालू' अपने होंठ और काट। अक्सर या हल्के से उपयोग न करें .. गहरे रिफैक्टरिंग के लिए इसे प्रारंभिक बिंदु के रूप में उपयोग करें। समय के साथ इस परीक्षण कार्यक्रम को बर्न के पीछे ले जाया जा सकता है क्योंकि आप अधिक कक्षाएं (अपने स्वयं के परीक्षणों के साथ) निकालते हैं।
और अधिक .. कृपया पुस्तक पढ़ें। अमूल्य। भाई पर लड़ो!
मेरी इच्छा है कि मैं यह एक अपवित्र x 10 कर सकता हूं, यह अब तक मैंने पढ़ा है कि एसओ पर सबसे अच्छे प्रश्न हैं। मैंने उन लोगों की गिनती खो दी है जो अभी हार मानते हैं 'हम परीक्षण नहीं कर सकते .. हमारे पास सी ++ कोड है .. बूहू!' – Gishu
Gishu, और अधिक सहमत नहीं हो सका। मैं यहां वही चर्चा कर रहा हूं जहां मैं काम करता हूं। – Lou