Steven D'Aprano wrote: > Does anyone have any good hints for testing interactive code that uses > raw_input, or input in Python 3? > > A simple technique would be to factor out the interactive part, e.g. like > this: > > # Before > def spam(): > answer = raw_input(prompt) > return eggs(answer) + cheese(answer) + toast(answer) > > # After > def spam(): > answer = raw_input(prompt) > return func(answer) > > def func(s): > return eggs(s) + cheese(s) + toast(s) > > > > and then test func. But how about times where it is inconvenient to > factor out the raw_input stuff out of the function? E.g. suppose you have > a function that takes some arguments, gathers some more values > interactively, processes the lot, and then returns a result. With an > automated test, I can provide the arguments, and check the result, but > what are my options for *automatically* supplying input to raw_input?
https://pypi.python.org/pypi/mock In Python 3 this is part of the standard library: from unittest import mock def sum_it(): return "{} + {} = {}".format(input(), input(), input()) with mock.patch('builtins.input', side_effect="123"): assert sum_it() == "1 + 2 = 3" I have not yet used it myself so far; instead I did something like def sum_it(input=input): ... and then passed a hand-crafted mock input function to increase coverage. -- https://mail.python.org/mailman/listinfo/python-list