Pregunta de entrevista para Desarrollador Python

¿Cómo testearías una función que llama a una API de pagos de terceros?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Aísla la frontera. Pon la llamada HTTP detrás de un cliente ligero, y en los tests sustitúyelo por un doble o parchéalo donde se usa, no donde se define. Usa fixtures de pytest para la preparación y parametrize para los casos de éxito, fallo y timeout. Añade un pequeño conjunto de tests de contrato contra el sandbox real para que los mocks no se desalineen.

Por qué lo preguntan los entrevistadores

Los entrevistadores usan esto para ver cómo piensas sobre las fronteras de test y sobre el diseño. Quien parchea entrañas profundas te está diciendo que su código no tiene costuras. También escuchan tu soltura con pytest, es decir fixtures, parametrize y monkeypatch, y si eres consciente de que los mocks codifican supuestos que se pudren, así que algo tiene que verificar el contrato real de vez en cuando.

Cómo estructurar tu respuesta

  • Diseña una costura antes de hablar de mocks.
  • Explica el parcheo en el punto de uso.
  • Cubre las rutas de fallo con parametrize.
  • Protégete del desfase de los mocks con tests de contrato.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

La testeabilidad es primero una cuestión de diseño. Si la llamada de pago está enterrada dentro de la lógica de negocio, la saco a una clase cliente con un par de métodos, y entonces la lógica recibe ese cliente como argumento. Llegado ese punto, la mayoría de los tests no necesitan librería de mocking ninguna, porque le paso un doble pequeño que devuelve respuestas preparadas, y eso se lee mejor que una pila de decoradores patch. Donde sí parcheo, parcheo el nombre en el módulo bajo test, no en el módulo de la librería, porque parchear donde se define no hace nada una vez que ya se ha importado en otro sitio. Las fixtures construyen los objetos, y parametrize cubre los casos interesantes: aprobado, rechazado, timeout y un payload mal formado, porque las ramas de fallo son las que de verdad se rompen en producción. También mantengo un puñado de tests contra el sandbox del proveedor, etiquetados para que corran de noche y no en cada commit. Eso cazó un cambio en el que el proveedor empezó a devolver un código de error que nunca habíamos mockeado.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Cómo evitas tests que comprueban las tripas de un mock?
  • ¿Cuándo es mejor un doble que un MagicMock?
  • ¿Cómo testearías el comportamiento de reintentos y backoff?

Más preguntas para Desarrollador Python

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot