Python 3.x asynctest.TestCase.setUp如何被async和sync方法覆盖?
我正在编写一个单元测试,它继承自Python 3.x asynctest.TestCase.setUp如何被async和sync方法覆盖?,python-3.x,python-asyncio,asynctest,Python 3.x,Python Asyncio,Asynctest,我正在编写一个单元测试,它继承自asynctest.TestCase,并希望创建一些mixin,在每个测试用例之前执行: import asynctest class Mixin1(object): async def setUp(self): await super(Mixin1, self).setUp() class MyTest(Mixin1, asynctest.TestCase): async def setUp(self):
asynctest.TestCase
,并希望创建一些mixin,在每个测试用例之前执行:
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
进行阻塞调用,但是如果引入第二个异步mixin,那么它就会失败
我最后写了所有的设置调用,但感觉一定有更好的方法:
async def setUp(self):
# do stuff
setUp = super(Mixin1, self).setUp
if asyncio.iscoroutine():
await setUp()
else:
setUp()
有没有更好的方法来链接设置调用?我想对您的解决方案提出一个小的解决方案,使其能够工作:
async def setUp(self):
# do stuff
setUp = super().setUp
if asyncio.iscoroutinefunction(setUp):
await setUp()
else:
setUp()