【问题标题】:How asynctest.TestCase.setUp can be overridden by both async and sync methods?asynctest.TestCase.setUp 如何被异步和同步方法覆盖?
【发布时间】: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


    【解决方案1】:

    我想对您的解决方案提出一个小修复,使其能够正常工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2020-02-07
      • 2018-02-24
      相关资源
      最近更新 更多