I don’t know if this post title is good enough, but that is something I was facing some days ago :
The problem here can be described as below :
We’d like to mock the first (or the last ?)
Popencall, to test the chained external calls logic
We can’t mock totally
Popen, because each call would return the same thing, and this is not what we want here
There is exactly the same problem with
check_outputcalls (the first one has to fail, whereas the second one should have its “default” behavior)
These calls happen during the same tested method, so it’s not possible to reset the mock like some persons use to do :
So I’ve tried something, based upon this StackOverflow thread, and the result was impressive after some struggles, as expected
The idea is :
Mock the object you want to mock with a new object you control
This new object will behave in function of an internal state that you set
Decide when you want to mock this object with a “patched” entity, or let it act with its default behavior !
So let’s stop endless sentences and present a working solution please !
Yeah, you’ll find below a simple use case to illustrate this principle :