2011-01-17 26 views
10

मैं जानना चाहता हूं कि पाइथन के लिए कौन से परीक्षण उपकरण इंटरैक्टिव प्रोग्राम के परीक्षण का समर्थन करते हैं।परीक्षण इंटरैक्टिव पायथन प्रोग्राम

$ python dummy_program.py 

>> Hi whats your name? Joseph 

मैं साधन Joseph इसलिए मैं उस इंटरैक्टिव व्यवहार का अनुकरण कर सकते हैं करना चाहते हैं: उदाहरण के लिए, मैं एक आवेदन द्वारा शुरू की है।

उत्तर

1

आपका सबसे अच्छा शर्त शायद, निर्भरता इंजेक्शन है ताकि क्या आप आमतौर पर (उदाहरण के लिए) sys.stdin से उठा था वास्तव में एक वस्तु में पारित कर दिया है आप कुछ इस तरह कर सकते हैं तो:।

import sys 

def myapp(stdin, stdout): 
    print >> stdout, "Hi, what's your name?" 
    name = stdin.readline() 
    print >> stdout "Hi,", name 

# This might be in a separate test module 
def test_myapp(): 
    mock_stdin = [create mock object that has .readline() method] 
    mock_stdout = [create mock object that has .write() method] 
    myapp(mock_stdin, mock_stdout) 

if __name__ == '__main__': 
    myapp(sys.stdin, sys.stdout) 

सौभाग्य से, पायथन यह बहुत आसान बनाता है। http://konryd.blogspot.com/2010/05/mockity-mock-mock-some-love-for-mock.html

+1

वास्तव में, निर्भरता इंजेक्शन जाने का रास्ता है। हालांकि, अगर किसी अजीब कारण के लिए वह कोड नहीं बदल सकता है, तो वह 'sys.stdin = mock_stdin' और' sys.stdout = mock_stdout' के साथ सीधे 'stdin' और' stdout' को बदल सकता है। यदि उसे परीक्षण के दौरान मूल की आवश्यकता होती है, तो वह 'sys .__ stdin__' और' sys .__ stdout__' का उपयोग कर सकता है, जो मूल मान रखता है। – PaoloVictor

2

आप एक इंटरैक्टिव कार्यक्रम का परीक्षण कर रहे हैं, तो expect उपयोग करने पर विचार: यहाँ मजाक stdin का एक उदाहरण के लिए एक अधिक विस्तृत लिंक भी है। यह विशेष रूप से कंसोल प्रोग्राम के साथ बातचीत करने के लिए डिज़ाइन किया गया है (हालांकि, परीक्षण के बजाए कार्यों को स्वचालित करने के लिए और अधिक)।

यदि आपको भाषा की उम्मीद पसंद नहीं है (टीसीएल) पर आप pexpect पर प्रयास कर सकते हैं जो कंसोल प्रोग्राम के साथ बातचीत करना आसान बनाता है।

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