Python | Parcheo de objetos de prueba unitaria | Conjunto-2

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *