मैं एक घटक लिख रहा हूं, जिसे एक जिप फाइल दी गई है:
- फ़ाइल खोलना।
- अनज़ैप्ड फ़ाइलों के बीच एक विशिष्ट डीएल का पता लगाएं।
- प्रतिबिंब के माध्यम से उस dll को लोड करें और उस पर एक विधि लागू करें।
मैं इस घटक का परीक्षण करना चाहूंगा।
मैं कोड लिखने के लिए ललचा रहा हूँ जो सीधे फाइल सिस्टम के साथ काम करता है:
void DoIt()
{
Zip.Unzip(theZipFile, "C:\\foo\\Unzipped");
System.IO.File myDll = File.Open("C:\\foo\\Unzipped\\SuperSecret.bar");
myDll.InvokeSomeSpecialMethod();
}
लेकिन लोग अक्सर कहते हैं, "इकाई परीक्षण न लिखें जो फ़ाइल सिस्टम, डेटाबेस, नेटवर्क, आदि पर भरोसा करते हैं"
अगर मुझे इसे यूनिट-टेस्ट फ्रेंडली तरीके से लिखना था, तो मुझे लगता है कि यह इस तरह दिखेगा:
void DoIt(IZipper zipper, IFileSystem fileSystem, IDllRunner runner)
{
string path = zipper.Unzip(theZipFile);
IFakeFile file = fileSystem.Open(path);
runner.Run(file);
}
वाह! अब यह परीक्षण करने योग्य है; मैं DoIt विधि के लिए परीक्षण युगल (नकली) में फ़ीड कर सकते हैं। लेकिन किस कीमत पर? मुझे अब इस परीक्षण योग्य बनाने के लिए 3 नए इंटरफेस परिभाषित करने होंगे। और क्या, वास्तव में, क्या मैं परीक्षण कर रहा हूं? मैं परीक्षण कर रहा हूं कि मेरा DoIt फ़ंक्शन ठीक से अपनी निर्भरता के साथ सहभागिता करता है। यह परीक्षण नहीं करता है कि ज़िप फ़ाइल ठीक से अनज़िप की गई थी, आदि।
ऐसा महसूस नहीं होता है कि मैं कार्यक्षमता का परीक्षण कर रहा हूं। ऐसा लगता है कि मैं सिर्फ कक्षा की बातचीत का परीक्षण कर रहा हूं।
मेरा सवाल यह है : फ़ाइल सिस्टम पर निर्भर किसी चीज़ का परीक्षण करने का उचित तरीका क्या है?
मैं संपादित कर रहा हूँ .NET का उपयोग कर रहा हूं, लेकिन अवधारणा जावा या देशी कोड भी लागू कर सकती है।
myDll.InvokeSomeSpecialMethod();
जहाँ आप जाँचेंगे कि यह सफलता और असफल दोनों स्थितियों में सही ढंग से काम करता है इसलिए मैं इकाई परीक्षण नहीं करूँगा, DoIt
लेकिन DllRunner.Run
कहा कि संयुक्त जांच में यूएनआईटी परीक्षण का दुरुपयोग करते हुए पूरी प्रक्रिया होगी। एक स्वीकार्य दुरुपयोग और जैसा कि यह एक एकीकरण परीक्षण होगा एक इकाई की जांच करने वाली एक इकाई है जो सामान्य इकाई परीक्षण नियमों को कड़ाई से लागू करने की आवश्यकता नहीं है