[TIP] mock os.walk

Andrea Crotti andrea.crotti.0 at gmail.com
Thu Mar 22 08:04:51 PDT 2012

On 03/22/2012 02:47 PM, Andrea Crotti wrote:
> Looking around I found out that this:
> my_mock = Mock(return_value=iter(test_dir))
> actually works perfectly, even if I'm not sure why...
> I would still like to know why my MagicMock is not returning anything 
> though..

Puff I finally solved all my problems and all the tests are passing :)

I found another thing which I think is at least counter-intuitive.

This below will not work as expected:

my_mock = Mock(return_value=iter(test_dir))

@patch('os.walk', new=my_mock)
def myfun2():
     for r, ds, df in os.walk('.'):
         print(r, ds, df)

@patch('os.walk', new=my_mock)
def myfun3():
     for r, ds, df in os.walk('.'):
         print(r, ds, df)


because the iterator is consumed the first run and in the second run 
there it will just
return the empty list.
Is it the desired behaviour?

More information about the testing-in-python mailing list