Las instancias de MagicMock que normalmente se usan como valores de reemplazo están destinadas a imitar las llamadas y las instancias. Registran información sobre el uso y permiten hacer afirmaciones como se muestra en el código que figura a continuación:
Código #6:
from unittest.mock import MagicMock m = MagicMock(return_value = 10) print(m(1, 2, debug = True), "\n") m.assert_called_with(1, 2, debug = True) m.assert_called_with(1, 2)
Producción :
10 Traceback (most recent call last): File "", line 1, in File ".../unittest/mock.py", line 726, in assert_called_with raise AssertionError(msg) AssertionError: Expected call: mock(1, 2) Actual call: mock(1, 2, debug=True)
Código #7: Reemplazando el valor proporcionándolo como un segundo argumento parapatch()
print("x : ", x) with patch('__main__.x', 'patched_value'): print(x) patched_value print("x : ", x)
Producción :
x : 42 x : 42
Las instancias de MagicMock que normalmente se usan como valores de reemplazo están destinadas a imitar las llamadas y las instancias. Registran información sobre el uso y pueden hacer afirmaciones.
from unittest.mock import MagicMock m = MagicMock(return_value = 10) print(m(1, 2, debug = True), "\n") m.assert_called_with(1, 2, debug = True) m.assert_called_with(1, 2)
Producción :
10 Traceback (most recent call last): File "", line 1, in File ".../unittest/mock.py", line 726, in assert_called_with raise AssertionError(msg) AssertionError: Expected call: mock(1, 2) Actual call: mock(1, 2, debug=True)
Código #8: Trabajando en el ejemplo
m.upper.return_value = 'HELLO' print (m.upper('hello')) assert m.upper.called m.split.return_value = ['hello', 'world'] print (m.split('hello world')) m.split.assert_called_with('hello world') print (m['blah']) print (m.__getitem__.called)
Producción :
'HELLO' ['hello', 'world'] <MagicMock name='mock.__getitem__()' id='4314412048'> True
Normalmente, este tipo de operaciones se llevan a cabo en una prueba unitaria. Se explica con un ejemplo tomando una función en el código que figura a continuación:
Código #9:
from urllib.request import urlopen import csv def dowprices(): u = urlopen('http://finance.yahoo.com/d/quotes.csv?s =@^DJI&f = sl1') lines = (line.decode('utf-8') for line in u) rows = (row for row in csv.reader(lines) if len(row) == 2) prices = { name:float(price) for name, price in rows } return prices
Normalmente, esta función se utiliza urlopen()
para obtener datos de la Web y analizarlos. Para probarlo unitariamente, se puede usar un conjunto de datos más predecible.
Publicación traducida automáticamente
Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA