【发布时间】:2017-12-10 02:02:17
【问题描述】:
我正在编写一个继承自 asynctest.TestCase 的单元测试,并希望创建一些在每个测试用例之前执行 asynchronous setUp 的 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 恰好是 non-async method 并且我们得到:
TypeError: object NoneType can't be used in 'await' expression
显然,我可以更改Mixin1 以对setUp 进行阻塞调用,但如果我引入第二个异步混入,它将失败。
我最终像这样编写了所有的设置调用,但感觉必须有更好的方法:
async def setUp(self):
# do stuff
setUp = super(Mixin1, self).setUp
if asyncio.iscoroutine():
await setUp()
else:
setUp()
有没有更好的方法来链接 setUp 调用?
【问题讨论】:
标签: python-3.x python-asyncio asynctest