[Tutor] using generators to mock raw_input for doctest
Kent Johnson
kent37 at tds.net
Sun Aug 10 20:03:38 CEST 2008
On Sun, Aug 10, 2008 at 1:38 AM, <broek at cc.umanitoba.ca> wrote:
> 2) Is there some better way to enable doctesting of code that uses
> raw_input? All I found when googling was the suggestion that in place of:
>
> def myfunc():
> # code employing raw_input here
>
> one could write:
>
> def myfunc(input_meth=raw_input):
> # code with raw_input calls replaced with input_meth calls
>
> but that seems like complicating my code for the non-doctest case.
It is not going to make your code more complicated - the client code
doesn't change at all and in myfunc you just change your use of
raw_input() to input_meth(). If you declare
def myfunc(raw_input=raw_input):
you don't even have to change the body of myfunc.
> class myraw(object):
> def __init__(self, values):
> self.values = values
> self.stream = self.mygen()
> def mygen(self):
> for i in self.values:
> yield i
> def readline(self):
> return str(self.stream.next())
This is needlessly complex. The values argument must be iterable (or
the for loop would break) so you might as well use its iterator
instead of making your own:
class myraw(object):
def __init__(self, values):
self.stream = iter(values)
def readline(self):
return str(self.stream.next())
Kent
More information about the Tutor
mailing list