Estoy tratando de burlarse de subprocess.Popen
. Sin embargo, cuando ejecuto el siguiente código, el simulacro se ignora por completo y no estoy seguro de por qué
Código de prueba:
def test_bring_connection_up(self): # All settings should either overload the update or the run method mock_popen = MagicMock() mock_popen.return_value = {'communicate': (lambda: 'hello','world')} with patch('subprocess.Popen', mock_popen): self.assertEqual(network_manager.bring_connection_up("test"), "Error: Unknown connection: test.\n")
Código del módulo:
from subprocess import Popen, PIPE # ........ def list_connections(): process = Popen(["nmcli", "-t", "-fields", "NAME,TYPE", "con", "list"], stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() # <--- Here's the failure return stdout
No estás parcheando en el lugar correcto. Usted Popen
donde se define Popen
:
with patch('subprocess.Popen', mock_popen):
Popen
aplicar un parche donde se importa Popen
, es decir, en el “Código del módulo” donde escribió esta línea:
from subprocess import Popen, PIPE
Es decir, debería verse algo como:
with patch('myapp.mymodule.Popen', mock_popen):
Para una guía rápida, lea la sección en los documentos: Dónde parchear .