#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
Заранее спасибо!