El problema es escribir pruebas unitarias y es necesario aplicar parches a los objetos seleccionados para hacer afirmaciones sobre cómo se usaron en la prueba (por ejemplo, afirmaciones sobre ser llamado con ciertos parámetros, acceso a atributos seleccionados, etc.).
Para ello, la unittest.mock.patch()
función se puede utilizar para ayudar con este problema. Es un poco inusual, pero patch()
se puede usar como decorador, administrador de contexto o independiente.
Código #1: Uso unittest.mock.patch
como decorador
from unittest.mock import patch import example @patch('example.func') def test1(x, mock_func): # Uses patched example.func example.func(x) mock_func.assert_called_with(x)
Código #2: Usar unittest.mock.patch
como decorador
with patch('example.func') as mock_func: example.func(x) mock_func.assert_called_with(x)
Código #3: Usar unittest.mock.patch
para parchear cosas manualmente.
p = patch('example.func') mock_func = p.start() example.func(x) mock_func.assert_called_with(x) p.stop()
Código n.° 4: apilar decoradores y administradores de contexto para parchear varios objetos
@patch('example.func1') @patch('example.func2') @patch('example.func3') def test1(mock1, mock2, mock3): ... def test2(): with patch('example.patch1') as mock1, \ patch('example.patch2') as mock2, \ patch('example.patch3') as mock3: ...
patch()
funciona tomando un objeto existente con el nombre completo que proporciona y reemplazándolo con un nuevo valor. Luego, el valor original se restaura después de completar la función decorada o el administrador de contexto. De forma predeterminada, los valores se reemplazan con instancias de MagicMock.
Código #5: Ejemplo
x = 42 with patch('__main__.x'): print(x) print (x)
Producción :
<MagicMock name='x' id='4314230032'> 42
Publicación traducida automáticamente
Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA