mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
ce7e24b924
The entire public api is covered with documentation in two languages - Russian and English. the library now supports the latest three versions of python - 3.12, 3.13 and 3.14 minor design changes: now, when a Boolean flag is entered, its value is an empty string, not None. tests have been adapted to the supported versions of python, readmi has been redesigned in two languages, German is no longer available.
71 lines
3.6 KiB
ReStructuredText
71 lines
3.6 KiB
ReStructuredText
Тестирование
|
|
============
|
|
|
|
В этом разделе описаны практики тестирования приложений на основе ``Argenta``. Примеры основаны на фактическом публичном API.
|
|
|
|
Модульное тестирование обработчиков
|
|
------------------------------------
|
|
|
|
Обработчики в ``Argenta`` — обычные функции. Их удобно тестировать как чистые функции, не поднимая весь цикл приложения. Рекомендуются ``unittest`` или ``pytest``.
|
|
|
|
**Пример использования:**
|
|
|
|
.. literalinclude:: ../code_snippets/testing/simple_handler_unittest.py
|
|
:language: python
|
|
:linenos:
|
|
|
|
-----
|
|
|
|
Тестирование с внедрением зависимостей (DI)
|
|
-------------------------------------------
|
|
|
|
Если обработчику нужны зависимости, используйте ``dishka`` и интеграцию ``Argenta``:
|
|
|
|
**Пример использования:**
|
|
|
|
.. literalinclude:: ../code_snippets/testing/di_handler_unittest.py
|
|
:language: python
|
|
:linenos:
|
|
|
|
-----
|
|
|
|
Интеграционное тестирование приложения
|
|
--------------------------------------
|
|
|
|
Для более высокого уровня тестов собирайте ``App`` и ``Router`` и вызывайте обработчики через парсинг команд, обходя бесконечный цикл ввода. Это даёт близкое к реальности поведение без необходимости симулировать ``stdin``.
|
|
|
|
**Пример использования:**
|
|
|
|
.. literalinclude:: ../code_snippets/testing/app_integration_unittest.py
|
|
:language: python
|
|
:linenos:
|
|
|
|
-----
|
|
|
|
E2E-тестирование цикла
|
|
----------------------
|
|
|
|
Полный запуск цикла ``start_polling`` можно покрывать через подпроцесс с передачей строк в ``stdin``. Это тяжелее и обычно не требуется. Если всё же необходимо — пример ниже.
|
|
|
|
.. danger::
|
|
**Важно:** Обязательно передавайте строковый триггер команды выхода последним элементом в списке ``side_effects`` при патче ``input``.
|
|
|
|
Иначе тестируемое приложение будет ожидать ввода следующей команды и не сможет корректно завершиться.
|
|
|
|
**Пример использования:**
|
|
|
|
.. literalinclude:: ../code_snippets/testing/app_e2e_test.py
|
|
:language: python
|
|
:linenos:
|
|
|
|
-----
|
|
|
|
Советы по тестированию
|
|
----------------------
|
|
|
|
1. **Изолируйте тесты**: Каждый тест должен быть независимым от других.
|
|
2. **Моки для внешних интеграций**: БД, HTTP-клиенты и т.п. подменяйте заглушками и провайдерами ``dishka``.
|
|
3. **Покрывайте ошибочные сценарии**: Некорректные флаги, неизвестные команды, пустой ввод.
|
|
4. **Минимизируйте зависимость от форматирования**: Сравнивайте ключевые фрагменты вывода, а не весь блок целиком.
|
|
5. **Измеряйте покрытие**: Используйте ``pytest-cov``.
|