[TIP] mock os.walk

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

On 03/22/2012 03:13 PM, Michael Foord wrote:
> Well, it may or may not be desired - but it is what you have told mock 
> to do. :-)
> If you're using mock 0.8 you can do:
>     @patch('os.walk', return_value=iter(test_dir))
>     def test(mock_walk):
>         ...
> This creates a new mock instead of a pre-created one. If you really 
> *want* to use a single mock for all your tests then you can use a 
> side_effect to create and return a fresh iterator every time:
>     my_mock = Mock(side_effect=lambda *a, **kw: iter(test_dir))
> HTH,
> Michael
Yes sure it makes sense, but actually it's not a problem because passing 
the list
my_mock = Mock(return_value=test_dir)

works perfectly, so I don't need to create an extra function..

The annoying thing was that I got this problem also using the mock once, 
*but* patching
the TestCase class instead of the single modules, and in that case I 
think it's counter-intuitive..

More information about the testing-in-python mailing list