Unit tests
Simple unit test
import pytest
def test_some():
assert 1 == 1Async unit test
Надо поставить плагин для pytest — pytest-asyncio
import pytest
@pytest.mark.asyncio
async def test_some():
assert 1 == 1Test exceptions
import pytest
def test_raise():
with pytest.raises(TypeError):
// do something that lead to the TypeError exception
... Запустить тест с набором параметров
Тест асинхронного запроса с асинхронным контекстом
Инструменты:
pytest
pytest-mock
pytest-asyncio
aiohttp
Пусть есть такой код (делаем асинхронно GET http запрос к API и парсим ответ с помощью pydantic):
Сложность в этом кусочке:
Пишем тест:
Где:
[1] — импортируем нашу асинхронную функцию для тестов
[2] — проставляем метку для плагина pytest-asyncio, чтобы pytest смог запустить асинхронный код
[3] — Для удобства проставляем тип для нашей фикстуры (эту аннотацию поддерживает pytest-mock)
[4] — Собираем mock-объект для aiohttp.ClientResponse
[5] — Проставляем ответ для вызова асинхронной функции (4), при этом обрати внимание, что ответ получаем из асинхронного контекста, который формировали в (2)
[6] — Проставляем ответ для вызова асинхронной функции get — (3)
[7] — Проставляем ответ, который получаем при заходе в контекст (1)
[8] — Запускаем саму асинхронную функцию, для которой мы наконец-то пропатчили все сайд эффекты
Last updated