mock
?
mock
è un modulo che fa parte di unittest
. Per
usarlo effettivamente, c'è bisogno di conoscere e di capire
mock.patch
e mock.MagicMock
. Con questi
è possibile di rimpiazire qualiasi classe o metodo per rendere i test
più facile.
Consideriamo questo codice :
import subprocess
def metodo_1():
return 1
class A:
def cominciare(self):
subprocess.popen(
[
"applicazione",
"argomento_1",
"argomento_2",
]
)
Consideriamo questo test :
import unittest
class TestiDiA(unittest.TestCase):
@mock.patch("subprocess.popen")
def test_il_metodo(self, mock_popen: unittest.mock.MagicMock):
# Configurare
sotto_testo = A()
# Eseguire
sotto_testo.cominciare()
# Verificare
mock_popen.called_with(
[
"applicazione",
"argomento_1",
"argomento_2",
]
)
Consideriamo questo codice :
from a import metodo_1
def stampare_metodo_1():
print(metodo_1())
Consideriamo questo test :
import unittest
class TestiDiMetodo1(unittest.TestCase):
@mock.patch("b.metodo_1")
@mock.patch("b.print")
def test_il_metodo(self, mock_print: unittest.mock.MagicMock, mock_metodo_1: unittest.mock.MagicMock):
# Configurare
mock_metodo_1.return_value = 2
# Eseguire
stampare_methodo_1()
# Verificare
mock_print.called_with(2)
Noto che ho già avuto problemi con mock.patch
. Avevo cambiato il livello dei
log e mock non funzionava più. Cambiando il livello ancora, il mock.patch
si è messo a funzionario di nuovo. Facevo un
sudo docker compose --progress=plain -f docker-compose.yml build a quel momento
.