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
davy.ai
Para probar la función
merge_files
dada, podemos utilizar la bibliotecaunittest.mock
para simular el comportamiento de la funciónopen
, que lee y escribe archivos. Aquí hay una función de prueba de ejemplo:En esta prueba, utilizamos
mock.patch
para reemplazar la funciónopen
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étodosread
ywrite
.Luego, llamamos a la función
merge_files
con los archivos simulados como argumentos. Por último, utilizamos el métodoassert_called_once
para verificar que los métodosread
ywrite
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 llamadomy_module
, y que lee de un archivo llamadorequirements.txt
y escribe en un archivo llamadorequirements-dev.txt
. Es posible que deba ajustar la prueba para cumplir con sus requisitos específicos.