es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de parchar y probar eso. Puede usar el atributo side_effect de Mock para devolver diferentes valores en llamadas subsiguientes a count_paras. Aquí hay un ejemplo de fragmento de código que demuestra cómo hacerlo:

    mi_dict_prueba = {'nombre_archivo1': 3, 'nombre_archivo2': 30, 'nombre_archivo3': None}
    with mock.patch.object(project, 'count_paras') as mock_count:
        mock_count.side_effect = [
            mi_dict_prueba['nombre_archivo1'],
            mi_dict_prueba['nombre_archivo2'],
            mi_dict_prueba['nombre_archivo3']
        ]
        project.process_files(mi_dict_prueba.keys())
        assert project.n_valid_files == 2  # Esperamos que se cuente 2 archivos válidos
    

    En este código, creamos un objeto Mock para count_paras y asignamos el atributo side_effect a una lista de valores que queremos que devuelva en llamadas subsiguientes. Luego llamamos a project.process_files con la lista de nombres de archivos, lo que hará que count_paras se llame varias veces con cada nombre de archivo. La lista side_effect garantiza que se devuelva el valor correcto para cada llamada a count_paras. Finalmente, podemos afirmar que se contó el número esperado de archivos válidos.

Comments are closed.