आपका सबसे अच्छा शर्त शायद, निर्भरता इंजेक्शन है ताकि क्या आप आमतौर पर (उदाहरण के लिए) 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
स्रोत
2011-01-17 18:55:17
वास्तव में, निर्भरता इंजेक्शन जाने का रास्ता है। हालांकि, अगर किसी अजीब कारण के लिए वह कोड नहीं बदल सकता है, तो वह 'sys.stdin = mock_stdin' और' sys.stdout = mock_stdout' के साथ सीधे 'stdin' और' stdout' को बदल सकता है। यदि उसे परीक्षण के दौरान मूल की आवश्यकता होती है, तो वह 'sys .__ stdin__' और' sys .__ stdout__' का उपयोग कर सकता है, जो मूल मान रखता है। – PaoloVictor