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.

Cómo hacer pytest para mostrar que un método ha sido llamado con argumentos de tipos específicos?

Mi código es el siguiente:

class myClass:
    def __init__(self):
        self.client = myClient()

    def myMethod(self):
        query = Query()
        response = self.client.post(data=query)

Así que ahora me gustaría introducir un cambio de código de data=query a data=query.__dict__, ¿cómo diseñar pytest y Mock() para probar que self.client.post ha sido llamado pasando data=query.__dict__ en lugar de data=query?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para probar que self.client.post ha sido llamado pasando data=query.__dict__ en lugar de data=query, se puede utilizar el objeto MagicMock del módulo unittest.mock.

    Primero, puedes crear un método de prueba que configure el objeto simulado (mock object) y la instancia de myClass:

    import unittest.mock as mock
    
    def test_myMethod():
        # Crear una simulación de myClient
        client_mock = mock.MagicMock()
    
        # Crear una instancia de myClass usando la simulación de myClient
        my_class_instance = myClass()
        my_class_instance.client = client_mock
    
        # Llamar a myMethod
        my_class_instance.myMethod()
    

    Luego, puedes usar el método MagicMock.assert_called_with() para confirmar que self.client.post ha sido llamado con data=query.__dict__. Para hacer esto, modificarías el método de prueba para añadir la confirmación:

    def test_myMethod():
        # Crear una simulación de myClient
        client_mock = mock.MagicMock()
    
        # Crear una instancia de myClass usando la simulación de myClient
        my_class_instance = myClass()
        my_class_instance.client = client_mock
    
        # Llamar a myMethod
        my_class_instance.myMethod()
    
        # Confirmar que self.client.post fue llamado con data=query.__dict__
        query = Query()
        client_mock.post.assert_called_with(data=query.__dict__)
    

    Este método de prueba verificaría que self.client.post fue llamado con data=query.__dict__ en lugar de data=query.

Comments are closed.