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()