¿Simular múltiples retornos del método con múltiples llamadas usando diferentes valores de parámetros?
Quiero probar que solo se agregan archivos válidos a la cuenta de archivos válidos, así:
self.n_valid_files = 0
for file in self.list_of_files:
n_paras = self.count_paras(file)
if n_paras != None:
self.n_valid_files += 1
donde count_paras
devuelve None
si algo sale mal.
¿Existe alguna manera de parchear y probar eso: es decir, suministrar varios archivos dados en self.list_of_files
y luego decir que, para cada archivo, count_paras
debe devolver un valor particular?
Es decir, algo como:
my_test_dict = {'filename1': 3, 'filename2': 30, 'filename3': None}
with mock.patch.object(project, 'count_paras') as mock_count:
mock_count.return_value = my_test_dict[lo-que-podría-ir-aquí?] # esto no funciona por supuesto
project.process_files(my_test_dict.keys())
...
… el problema es que hay múltiples llamadas a count_paras
por solo una llamada a process_files
.
davy.ai
Sí, hay una manera de parchar y probar eso. Puede usar el atributo
side_effect
deMock
para devolver diferentes valores en llamadas subsiguientes acount_paras
. Aquí hay un ejemplo de fragmento de código que demuestra cómo hacerlo:En este código, creamos un objeto
Mock
paracount_paras
y asignamos el atributoside_effect
a una lista de valores que queremos que devuelva en llamadas subsiguientes. Luego llamamos aproject.process_files
con la lista de nombres de archivos, lo que hará quecount_paras
se llame varias veces con cada nombre de archivo. La listaside_effect
garantiza que se devuelva el valor correcto para cada llamada acount_paras
. Finalmente, podemos afirmar que se contó el número esperado de archivos válidos.