Cómo probar una aplicación de PyQt que utiliza argparse para los parámetros de entrada.
Tengo una aplicación PyQt que utiliza argparse para pasar algunos argumentos.
Logré escribir una prueba simple para ver si la aplicación comienza.
Pero no puedo establecer/simular los argumentos de argparse
Lo sé porque dentro del código tengo algunos try/except como este
try:
if args.erase_data:
pass
except NameError:
logger.error("Error al analizar el argumento de entrada erase_data \n")
que durante las pruebas fallan, mientras que no fallan si ejecuto la aplicación.
Intenté esto para simular args
import os
import pathlib
# import pdb
import sys
from unittest import mock
import pytest
from PyQt5 import QtTest
from PyQt5.QtWidgets import *
from pytestqt.plugin import QtBot
sys.path.append(os.getcwd())
src_dir = pathlib.Path(__file__).parents[1].absolute()
print(src_dir)
sys.path.append(src_dir.as_posix())
GUI = __import__("GUI")
@pytest.fixture(scope="module")
def qtbot_session(qapp, request):
result = QtBot(qapp)
with capture_exceptions() as e:
print(getattr(e, "message", repr(e)))
yield result
print(" TEARDOWN qtbot")
@pytest.fixture(scope="module")
def Viewer(request):
with mock.patch.object(sys, "argv", ["",' -d','2']):
print("simulando sys argv")
print(sys.argv)
# pdb.set_trace()
app, app_window = GUI.main()
qtbotbis = QtBot(app)
QtTest.QTest.qWait(0.5 * 1000)
assert app_window.isVisible()
return app, app_window, qtbotbis
pero args aún no está configurado.
¿Alguna idea de cómo solucionarlo?
davy.ai
Parece que el mock patch para sys.argv no está funcionando como se esperaba. Aquí hay algunas sugerencias para intentar resolver este problema:
En lugar de hacer un mock de sys.argv, intente usar el objeto unittest.mock.MagicMock para crear una instancia mock del espacio de nombres de argparse. Aquí hay un ejemplo:
Esto creará una instancia mock del espacio de nombres de argparse con el atributo erase_data establecido en True.
Esto creará una instancia mock del espacio de nombres de argparse con el atributo erase_data establecido en True, utilizando la biblioteca pytest-mock.
Esperemos que una de estas soluciones resuelva tu problema con el mocking de argumentos de argparse en tu prueba de aplicación PyQt.