This commit is contained in:
2025-11-21 19:41:35 +03:00
parent 8edd59c1b8
commit 2e76f68d4a
37 changed files with 395 additions and 482 deletions
+19 -4
View File
@@ -1,18 +1,20 @@
Тестирование
============
В этом разделе описаны практики тестирования приложений на основе ``Argenta``. Примеры основаны на фактическом публичном API: ``App``, ``Router``, ``Command``, ``Orchestrator``, DI через ``dishka`` и интеграцию в ``argenta.di.integration``.
В этом разделе описаны практики тестирования приложений на основе ``Argenta``. Примеры основаны на фактическом публичном API.
Модульное тестирование хендлеров
--------------------------------
Обработчики в Argenta — обычные функции. Их удобно тестировать как чистые функции, не поднимая весь цикл приложения. Рекомендуются ``unittest`` или ``pytest``.
Пример с ``unittest`` для простого хендлера без DI:
Пример для простого хендлера без DI:
.. literalinclude:: ../code_snippets/testing/simple_handler_unittest.py
:language: python
:linenos:
-----
Тестирование с внедрением зависимостей (DI)
-------------------------------------------
@@ -22,6 +24,8 @@
.. literalinclude:: ../code_snippets/testing/di_handler_unittest.py
:language: python
:linenos:
-----
Интеграционное тестирование приложения
--------------------------------------
@@ -31,11 +35,22 @@
.. literalinclude:: ../code_snippets/testing/app_integration_unittest.py
:language: python
:linenos:
-----
E2E-тестирование цикла (опционально)
E2E-тестирование цикла
------------------------------------
Полный запуск цикла ``start_polling`` можно покрывать через подпроцесс с передачей строк во ``stdin``. Это тяжелее и обычно не требуется. Если всё же необходимо — вынесите конфигурацию в функцию ``main()`` и запускайте модуль в подпроцессе с подготовленным вводом/выводом.
Полный запуск цикла ``start_polling`` можно покрывать через подпроцесс с передачей строк в ``stdin``. Это тяжелее и обычно не требуется. Если всё же необходимо — пример ниже.
.. danger ::
Обязательно передавайте строковый триггер команды выхода последним элементом в списке, который передаёте в контекстном менеджере при патче ``input`` как аргумент ``side_effects``, иначе тестируемое приложение будет ожидать ввода следующей команды и не сможет корректно завершиться.
.. literalinclude:: ../code_snippets/testing/app_e2e_test.py
:language: python
:linenos:
-----
Советы по тестированию
----------------------