我正在编写一个继承自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
进行阻止调用,但如果我引入第二个异步混合,则会失败。
我最后写了这样的所有setUp调用,但感觉必须有更好的方法:
async def setUp(self):
# do stuff
setUp = super(Mixin1, self).setUp
if asyncio.iscoroutine():
await setUp()
else:
setUp()
是否有更好的方法来链接setUp调用?
答案 0 :(得分:0)
我想对您的解决方案提出一点解决方案,使其可行:
async def setUp(self):
# do stuff
setUp = super().setUp
if asyncio.iscoroutinefunction(setUp):
await setUp()
else:
setUp()