Python Glossary English

Python 3.8+unittestпонятие

unittest.IsolatedAsyncioTestCase

тестирование

Базовый класс для тестов асинхронного кода: методы test_ могут быть async def, и каждый тест исполняется в собственном цикле событий.

Синтаксис

class MyTests(unittest.IsolatedAsyncioTestCase):
    async def asyncSetUp(self): ...
    async def test_x(self): ...

Подготовку с await пишут в asyncSetUp и asyncTearDown, а не в setUp: в обычном setUp await недоступен. Цикл событий новый на каждый тест, поэтому объект, привязанный к циклу (asyncio.Lock, Queue, клиентское соединение), созданный в setUpClass или на уровне модуля, в тесте ломается. Звать asyncio.run() внутри такого теста нельзя — цикл уже запущен, будет RuntimeError.

Примеры

import asyncio
import sys
import unittest
async def double(x):
    await asyncio.sleep(0)
    return x * 2
class DoubleTests(unittest.IsolatedAsyncioTestCase):
    async def asyncSetUp(self):
        self.value = await double(5)
    async def test_double(self):
        self.assertEqual(self.value, 10)
suite = unittest.TestLoader().loadTestsFromTestCase(DoubleTests)
result = unittest.TextTestRunner(stream=sys.stdout, verbosity=0).run(suite)
print(result.wasSuccessful())  # → True

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности