2013-06-18 9 views
9

मेरे पास एक कक्षा है जो एक फ़ाइल लेती है, उससे संबंधित फ़ाइल पाती है, और इसे खोलती है।मॉकिटो - एक फ़ाइल का मजाकिया व्यवहार

class DummyFileClass 
{ 
    private File fileOne; 
    private File fileTwo; 
    public DummyFileClass(File fileOne) 
    { 
     this.fileOne = fileOne; 
     fileTwo = findRelatedFile(fileOne) 
    } 

    public void someMethod() 
    { 
     // Do something with files one and two 
    } 

} 

की तर्ज मेरी इकाई परीक्षण में साथ कुछ है, मैं() कहीं बैठे शारीरिक फ़ाइलें बिना someMethod का परीक्षण करने के लिए सक्षम होना चाहता हूँ। मैं फ़ाइल को नकली कर सकता हूं, और इसे कन्स्ट्रक्टर को पास कर सकता हूं, लेकिन चूंकि फ़ाइल को कन्स्ट्रक्टर में गणना की जा रही है, इसलिए मुझे इसका नियंत्रण नहीं है।

मैं विधि ढूंढ सकता हूं RelatedFile() - लेकिन क्या यह सबसे अच्छा अभ्यास है? यहाँ एक व्यावहारिक कामकाज के बजाय सबसे अच्छा डिजाइन की तलाश में। मैं ढांचे का मज़ाक उड़ाते हुए काफी नया हूं।

+0

यह इस बात पर निर्भर करता है कि 'someMethod() 'क्या करना है। यह यहां शून्य हो जाता है। इस ऑब्जेक्ट को अपनी ऑब्जेक्ट के साथ बाद में बातचीत पर कॉल करने का क्या प्रभाव है? – fge

+0

अभी तक इसे लागू नहीं किया गया है, लेकिन योजना प्रत्येक आमंत्रण पर फ़ाइलों से थोड़ा सा पढ़ना है जब तक कि वे दोनों खाली न हों। – Ren

+1

मॉकिंग 'फाइल' है, गलती है, ठीक है, कड़ी मेहनत है। आप टेस्ट फाइल क्यों नहीं चाहते हैं? आप इसे ढांचा बना सकते हैं ताकि यह आपके टेस्ट केस को आसानी से पर्याप्त कर सके ... – fge

उत्तर

20

इस तरह की स्थिति में, मैं घटक का परीक्षण करने के लिए भौतिक फाइलों का उपयोग करता हूं और एक मॉकिंग फ्रेमवर्क पर भरोसा नहीं करता हूं। fge का उल्लेख है कि यह आसान हो सकता है और आपको किसी भी गलत धारणा के बारे में चिंता करने की ज़रूरत नहीं है जिसे आप अपने नकली बना सकते हैं।

उदाहरण के लिए, यदि आप File#listFiles() पर भरोसा करते हैं तो आप अपने नकली File एस की एक निश्चित सूची वापस कर सकते हैं, हालांकि, जिस क्रम में उन्हें वापस लौटाया गया है, वह गारंटी नहीं है - एक तथ्य यह है कि आप केवल तब ही खोज सकते हैं जब आप अपना कोड चलाते हैं अलग मंच

मैं JUnit के TemporaryFolder नियम का उपयोग कर आप फाइल और निर्देशिका संरचना आप अपने परीक्षण के लिए की जरूरत है, जैसे की स्थापना की मदद करने के लिए विचार किया जाएगा:

public class DummyFileClassTest { 
    @Rule 
    public TemporaryFolder folder = new TemporaryFolder(); 

    @Test 
    public void someMethod() { 
     // given 
     final File file1 = folder.newFile("myfile1.txt"); 
     final File file2 = folder.newFile("myfile2.txt"); 

     ... etc... 
    } 
} 

नियम किसी भी बनाई गई फ़ाइलों और निर्देशिका को साफ करना चाहिए जब परीक्षण पूरा करता है ।

+0

+1 पावरमैक फ़ाइल को नकल कर सकता है लेकिन यह आमतौर पर इसके लायक से अधिक परेशानी है। – samlewis

+0

कूल, अस्थायी फ़ोल्डर के बारे में नहीं पता था, अब तक .deleteOnExit का उपयोग कर रहा था :) – Lenymm