Pytest : simuler une connexion Mastodon ou Yunohost

Bonsoir,
Je souhaite tester, avec #pytest, des fonctions/méthodes d’un programme #python qui se connecte à un service (Mastodon ou Yunohost par exemple). Peut-on simuler facilement la connexion à ce service pour se concentrer sur les tests internes à mes fonctions/méthodes ?
En simulant la connexion j’espère m’affranchir d’une connexion réelle et donc :

  • pas de risques de mettre le bazar sur un compte réel
  • intégration des tests pytest plus facile dans la CI (gitlab dans mon cas)

Je ne sais pas trop par où commencer ma recherche… donc je suis preneur de pistes.
Merci.

Je ne connais pas les APIs de ces deux services mais si tu y accèdes via requests (ou un autre module plus haut-niveau construit dessus) alors peut-être que responses peut t’aider ?

1 « J'aime »

Je dirais de faire un mock de ta connexion. Typiquement, ton objet “Mastodon” poste un message, le supprime, re-pouet, etc… Tu crées donc un faux objet MastodonTest qui prendra les mêmes méthodes et arguments et qui te retournera un truc “comme si ça avait été fait pour de vrai”.

2 « J'aime »

Merci à tous les 2.
Je suis du coup en train de découvrir le concept de mock avec python. Cela semble effectivement la solution.
Je suis du coup en train regarder la doc de pytest-mock
:slight_smile:

La lumière sur mock() et le monkeypatching m’a été apportée par @tchappui en réalisant le travail sans faire appel à mock() et sans sucre syntaxique. On remplace une fonction / instance de classe rien qu’avec de la tuyauterie Python.
C’était verbeux, mais lumineux pour ma compréhension de la mécanique.
Si @tchappui s’en souvient, ou si d’autres membres auraient ce genre d’exercice, je repasserai volontiers sur le sujet aussi :bulb:

2 « J'aime »

C’est sûr que le faire “avec de la tuyauterie Python” doit être un bon moyen de bien intégrer le concept.

Je suis partant. :wink: