[TIP] Using Mock to patch an iterator / generator?

Andrew Hammond andrew.george.hammond at gmail.com
Thu Jun 9 16:08:40 PDT 2011

I have a class that looks like

class Foo(object):
    def iter(descending=False):
        for r in something_iterable:
            yield r

I would like to mock the class and patch Foo.iter. I have tried a number of
things without luck.

class TestFoo(PatchedTestCase):
    _partitions = []

    def partitions(self):
        for p in self._partitions:
            yield p

    def postSetUpPreRun(self):
        self._partitions = [ 1, 2, 3, 4  ]
        rw = Mock(spec=Foo)
        self.mock_RollingWindow = rw
        rw.iter = Mock()
        rw.iter.side_effect = self.partitions

This is following the pattern I've used for other methods, but doesn't work
for an iterator... so, what is the proper approach please?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20110609/618ba73a/attachment.htm>

More information about the testing-in-python mailing list