funziona bene per me (Ubuntu 13.04, Python 3.3.1):
$ python3.3
Python 3.3.1 (default, Sep 25 2013, 19:29:01)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mock
>>> import subprocess
>>> result = subprocess.call('date')
Fri Jan 3 19:45:32 CET 2014
>>> subprocess.call = mock.create_autospec(subprocess.call, return_value='mocked!')
>>> result = subprocess.call('date')
>>> print(result)
mocked!
>>> subprocess.call.mock_calls
[call('date')]
Credo che questa domanda riguardi l'utilizzo del pacchetto this particularmock
dichiarazioni generali, non correlate alla tua domanda diretta
scritto questo prima ho capito che la questione è specificamente l'uso del pacchetto finto pitone.
Un modo generale per deridere funzioni è ridefinire esplicitamente la funzione o il metodo:
$ python3.3
Python 3.3.1 (default, Sep 25 2013, 19:29:01)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call('date')
Fri Jan 3 19:23:25 CET 2014
0
>>> def mocked_call(*a, **kw):
... return 'mocked'
...
>>> subprocess.call = mocked_call
>>> subprocess.call('date')
'mocked'
Il grande vantaggio di questo approccio diretto è che questo è privo di dipendenze. Lo svantaggio è che se ci sono esigenze specifiche, tutta la logica decisionale deve essere codificata manualmente.
Come esempio di pacchetti scherno, FlexMockis available sia Python 2.7 e Python 3. * e il suo utilizzo imperativo subprocess.call
è discusso in this question
[Questo thread] (http://stackoverflow.com/questions/5166851/intercepting-subprocess-popen-call-in-python) potrebbe essere pertinente alla tua domanda, sebbene riguardi python-2.x. Ma immagino che non ci siano stati molti cambiamenti. – aepsil0n
Cosa intendete in particolare con "modalità di debug"? – cfi