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.

Pruebe una función en Python que fusiona archivos y no devuelve nada.

Tengo la tarea de escribir una prueba para la siguiente función:

def merge_files(cwd: Path, source: str, target: str):
“””[Combina el contenido de dos archivos del mismo tipo de datos]

Parámetros
----------
cwd : Path
    [Ruta del directorio de trabajo actual]
source : str
    [Archivo utilizado para fusionarse con el objetivo, se encuentra en la subcarpeta de la aplicación]
target : str
    [Archivo utilizado para fusionarse con la fuente]
"""
with open(os.path.join(cwd, "app", target), "a") as requirements_tool:
    with open(os.path.join(cwd, source), "r") as requirements_user:
        requirements_tool.write(requirements_user.read())

Mi problema es que no tengo idea de cómo escribir una prueba para ella. Soy bastante nuevo en las pruebas y pensé que para las pruebas no debería leer realmente nada desde un sistema de archivos, sino simular la salida esperada de un archivo. Podría hacer esto, pero dado que no tengo un valor de retorno, tampoco puedo verificarlo.

¿Alguien sabe cómo implementar una prueba para este tipo de funciones?

Editar: Los archivos serán requirements.txt y requirements-dev.txt

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para probar la función merge_files dada, podemos utilizar la biblioteca unittest.mock para simular el comportamiento de la función open, que lee y escribe archivos. Aquí hay una función de prueba de ejemplo:

    from unittest import mock, TestCase
    from my_module import merge_files
    
    class TestMergeFiles(TestCase):
    
        @mock.patch('builtins.open', new_callable=mock.mock_open)
        def test_merge_files(self, mock_open):
            # Simular archivos para leer y escribir
            mock_file_1 = mock.Mock()
            mock_file_2 = mock.Mock()
    
            # Configurar objetos de archivo simulados con contenidos deseados
            mock_file_1.read.return_value = "contenido del archivo 1"
            mock_file_2.write.return_value = None
    
            # Llamada a la función con archivos simulados
            merge_files("/ruta/hacia/directorio", "requirements.txt", "requirements-dev.txt")
    
            # Verificar que los archivos se abrieron y escribieron correctamente
            mock_file_1.read.assert_called_once()
            mock_file_2.write.assert_called_once_with("contenido del archivo 1")
    

    En esta prueba, utilizamos mock.patch para reemplazar la función open integrada por una función simulada que devuelve objetos de archivo simulados (mock.mock_open). También creamos objetos de archivo simulados separados para los archivos que se leerán y escribirán, y establecemos valores de retorno simulados para los métodos read y write.

    Luego, llamamos a la función merge_files con los archivos simulados como argumentos. Por último, utilizamos el método assert_called_once para verificar que los métodos read y write se llamaron exactamente una vez cada uno, con los argumentos esperados.

    Nota: Esta prueba asume que la función merge_files está en un módulo llamado my_module, y que lee de un archivo llamado requirements.txt y escribe en un archivo llamado requirements-dev.txt. Es posible que deba ajustar la prueba para cumplir con sus requisitos específicos.

Comments are closed.