[TIP] 'Mock' object is not iterable

Michael Foord michael at voidspace.org.uk
Mon Mar 26 06:22:24 PDT 2012

On 26/03/2012 14:04, Andrea Crotti wrote:
> I'm trying to mock out a function which looks for orphaned pyc files 
> in the filesystem.
> So I created something like this
> def fmock_b():
>     ret = Mock()
>     ret.pesky_pyc.return_value = ['b.pyc']
>     return ret
> and the function I'm testing does this:
>     for pyc in Walker(directory).pesky_pyc():
> but I get the error TypeError: 'Mock' object is not iterable
> But why?
> Actually also the non mocked version of Walker doesn't return a an 
> iterable from __init__, it's
> pesky_pyc that returns an iterable, so why does it complain?
> Any hint about how to fix it?

Hard to tell, but I suspect you want this (assuming "ret" is used to 
replace Walker):

     ret = Mock()
     mock_walker_instance = ret.return_value
     mock_walker_instance.pesky_pyc.return_value = ['b.pyc']


Michael Foord

> Thanks,
> Andrea
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python


May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
-- the sqlite blessing http://www.sqlite.org/different.html

More information about the testing-in-python mailing list