Najprościej jest prawdopodobnie zależność wtrysku, tak że to, co można zwyczajnie odebrać z sys.stdin (na przykład) jest rzeczywiście obiekt przeszedł w tak można zrobić coś takiego:.
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)
Na szczęście Python sprawia, że to całkiem proste. Oto bardziej szczegółowy odnośnik do przykładu ośmieszania stdin: http://konryd.blogspot.com/2010/05/mockity-mock-mock-some-love-for-mock.html
Rzeczywiście, zastrzyk uzależnienia jest drogą do zrobienia. Chociaż, jeśli z jakiegoś dziwnego powodu nie może zmienić kodu, może bezpośrednio zmienić 'stdin' i' stdout' za pomocą 'sys.stdin = mock_stdin' i' sys.stdout = mock_stdout'. Jeśli potrzebował oryginałów podczas testu, mógł użyć 'sys .__ stdin__' i' sys .__ stdout__', które zachowują oryginalne wartości. – PaoloVictor