2013-12-11 5 views
8

मैंने this से पूछा कि stdout में आउटपुट की जांच करने के लिए एक पाइस्टेस्ट कैसे लिखना है और समाधान मिला है। अब मैं अगर सामग्री फाइल करने के लिए लिखा जाता है और सामग्री के रूप में उम्मीद लिखा जाता है कि जाँच करने के लिए एक test case लिखने के लिए, की जरूरत है जैसे:पायथन में फ़ाइल में आउटपुट करने के लिए एक पायस्टेस्ट फ़ंक्शन लिख रहा है?

def writetoafile(): 
    file = open("output.txt",w) 
    file.write("hello\n") 
    file.write("world\n") 
    file.close() 

अब एक pytest समारोह की जाँच करने के अगर यह लिखा:

def test_writeToFile(): 
    file = open("ouput.txt",'r') 
    expected = "hello\nworld\n" 
    assert expected==file.read() 

जबकि यह काम करता प्रतीत होता है, मुझे नहीं लगता कि यह आदर्श है, विशेष रूप से हार्ड कोडिंग। आमतौर पर लिखे गए फ़ाइल में test functions लिखने के इस प्रकार कैसे हैं?

+0

यह आदर्श क्यों नहीं होगा? आपने लिखा है कि आप सामग्री को अपेक्षित रूप से जांचना चाहते हैं, इसलिए फ़ाइल और जांच में सबसे अच्छा विकल्प लगता है। आप यादृच्छिक वर्णों की श्रृंखला के साथ हमेशा एक चर बना सकते हैं और जांच सकते हैं कि यह सफलतापूर्वक लिखा गया है या नहीं; आप यह देखने के लिए "फ़ाइल.read() में अपेक्षित" जांच सकते हैं कि डेटा जोड़ा गया था या नहीं (लेकिन आपने ध्वज 'डब्ल्यू' का उपयोग किया ताकि यह एक खराब परीक्षण हो); इत्यादि। यदि आप ऐसा नहीं करते हैं तो आप क्या परीक्षण करना चाहते हैं? शायद आप जो चाहते हैं उसे जानना वास्तविक प्रश्न है, जैसा कि अधिकांश परीक्षणों में है। –

उत्तर

12

tmpdir fixture है जो आपको प्रति-परीक्षण अस्थायी निर्देशिका बनाएगा।

def writetoafile(fname): 
    with open(fname, 'w') as fp: 
     fp.write('Hello\n') 

def test_writetofile(tmpdir): 
    file = tmpdir.join('output.txt') 
    writetoafile(file.strpath) # or use str(file) 
    assert file.read() == 'Hello\n' 

यहाँ आप कोड पुनर्रचना कर रहे हैं या तो hardcoded नहीं किया जा करने के लिए है, जो कैसे अपने कोड का परीक्षण आप बेहतर डिजाइन बनाता है की एक प्रमुख उदाहरण है: तो एक परीक्षण यह कुछ ऐसा दिखाई देगा।

+0

tmpdir क्या करता है? तो यह स्मृति में वर्चुअल रूप से एक फाइल बनाता है? –

+1

यह एक वास्तविक निर्देशिका बनाता है जिसे आप बाद में निरीक्षण कर सकते हैं, यूनिक्स पर आप उन्हें आमतौर पर '/ tmp/pytest-xxxx' में सिमलिंक के साथ नवीनतम रन में पाएंगे। आप हमेशा 'py.test --fixtures' का आह्वान करके फिक्स्चर के बारे में जान सकते हैं और tmpdir मामले के लिए कृपया अधिक जानकारी के लिए http://pytest.org/latest/tmpdir.html देखें। – flub

संबंधित मुद्दे