2

我正在编写一个单元测试,它继承自asynctest.TestCase并希望创建一些在每个测试用例之前执行异步的 mixin:setUp

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

有没有更好的方法来链接 setUp 调用?

4

1 回答 1

0

我想对您的解决方案进行一些修复,使其正常工作:

async def setUp(self):
    # do stuff
    setUp = super().setUp
    if asyncio.iscoroutinefunction(setUp):
        await setUp()
    else:
        setUp()
于 2019-03-31T00:43:02.163 回答