[py-dev] Advanced monkeypatching?

Virgil Dupras hsoft at hardcoded.net
Mon Dec 20 10:56:33 CET 2010

On 2010-12-20, at 10:41 AM, Ronny Pfannschmidt wrote:
> On Mon, 2010-12-20 at 09:22 +0100, Virgil Dupras wrote:
>> On 2010-12-19, at 3:38 PM, Floris Bruynooghe wrote:
>>> Looking at the patch_osstat() it seems to me that it just fakes
>>> os.stat() for one specific path but uses the original in place
>>> otherwise.  This sounds like it could be just a specialised object
>>> used to patch with.  I can imagine the monkeypatch plugin to provide a
>>> funcarg which provides this functionality, e.g.:
>>> def test_foo(monkeypatch, monkey_osstat):
>>>   monkeypatch.setattr(monkey_ossstat('/tmp/some_file'))
>>>   ...
>> This would kind of work, but it would become complicated to patch os.stat() for two or more files, wouldn't it?
> there could be a monkey_stat object that controlls the set of
> files/subtrees under control

Yes, of course, but keeping the proposed API would make it unintuitive for multiple files. Example:

monkeypatch.setattr(os, 'stat', monkey_osstat('some_file'))
monkeypatch.setattr(os, 'stat', monkey_osstat('some_other_file'))

We're not sure what happens there, as os.stat is patched twice. Are we overwriting our old monkeypatch, or is there some magic caching inside monkey_osstat() making it work for both files? That's the kind of question the developer will wonder about.

More information about the Pytest-dev mailing list