Приложение Flask: Создание экземпляра макетной службы на основе среды

#python #flask

Вопрос:

Я пытаюсь решить интересную проблему. Приложение My Flask содержит несколько сервисов:

 # app.py ... email_service = EmailService() notification_service = NotificationService() third_party_integration = ThirdPartyService() ...  

Мой вопрос в том, как бы вы при запуске приложения flask переопределили эти службы и использовали макет версии класса для тестирования?

 # There must be a better way!  if app.testing:  email_service = EmailServiceMock() # Should be mocked during server tests (Pytest), but not during E2E tests (CI)  notification_service = NotificationServiceMock()  amazon_s3_client = AmazonS3ClientMock()  third_party_integration = ThirdPartyServiceMock() else:  email_service = EmailService()  notification_service = NotificationService()  amazon_s3_client = AmazonS3Client()  third_party_integration = ThirdPartyService()  

Эти макетные классы наследуются от исходных классов и добавляют дополнительные функции для поддержки тестов.

Я видел, как некоторые люди добавляли эти сервисы в экземпляр приложения Flask — какие-нибудь мысли по этому поводу? Это позволяет получать доступ к службам изнутри тестов:

 def test_endpoint_x(app):  ...  assert app.email_service._sent_emails_test_stack gt; 0  

Заранее спасибо!