异步和同步方法如何覆盖asynctest.TestCase.setUp?

时间:2017-12-10 02:02:18

标签: python-3.x python-asyncio asynctest

我正在编写一个继承自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调用?

1 个答案:

答案 0 :(得分:0)

我想对您的解决方案提出一点解决方案,使其可行:

async def setUp(self):
    # do stuff
    setUp = super().setUp
    if asyncio.iscoroutinefunction(setUp):
        await setUp()
    else:
        setUp()