Как asynctest.TestCase.setUp может быть переопределен как асинхронными, так и синхронизирующими методами?
Я пишу модульный тест, который наследует от asynctest.TestCase
и хотел бы создать некоторые миксины, которые выполняют асинхронныйsetUp
перед каждым тестом:
import asynctest
class Mixin1(object):
async def setUp(self):
await super(Mixin1, self).setUp()
class MyTest(Mixin1, asynctest.TestCase):
async def setUp(self):
await super(MyTest, self).setUp()
Проблема, которую я вижу в том, что Mixin1 в конечном итоге вызывает asynctest.TestCase.setUp
который оказывается не асинхронным методом, и мы получаем:
TypeError: object NoneType can't be used in 'await' expression
Очевидно, я могу просто изменить Mixin1
сделать блокирующий вызов setUp
, но тогда не получится, если я введу второй миксин, который является асинхронным.
Я закончил писать все мои вызовы setUp, как это, но кажется, что должен быть лучший способ:
async def setUp(self):
# do stuff
setUp = super(Mixin1, self).setUp
if asyncio.iscoroutine():
await setUp()
else:
setUp()
Есть ли лучший способ связать вызовы setUp?
0 ответов
Я хотел бы предложить небольшое исправление к вашему решению, которое заставляет его работать:
async def setUp(self):
# do stuff
setUp = super().setUp
if asyncio.iscoroutinefunction(setUp):
await setUp()
else:
setUp()