【问题标题】:unittest async mocks doesnt't work with pytest?unittest 异步模拟不适用于 pytest?
【发布时间】:2021-02-22 09:01:02
【问题描述】:
async def test_coro(id):
    print("pass")

async def test_coro2():
    print("pass")

async def mock_test_coro(id):
    print("pass")

async def mock_test_coro2():
    print("hj")

class Test(AioHTTPTestCase):
    async def get_application(self):
        app = web.Application(debug=True)
        return app

   @unittest_run_loop
   @patch(__name__ + '.test_coro', side_effect=(lambda id: mock_test_coro(id)))
   @patch(__name__ + '.test_coro2', side_effect=(lambda: mock_test_coro2()))
   async def test_1(self, test_coro, test_coro2):
       await test_coro2()
       await test_coro(0)

我在这个测试中失败了,因为(没有参数)

> test_coro = <AsyncMock name='test_coro2' id='139942609979472'>
> test_coro2 = <AsyncMock name='test_coro' id='139942609417456'>

为什么会这样? (如果有超过 2 个模拟 - 它会以随机顺序随机播放它们)

对于同步功能,它工作正常

【问题讨论】:

    标签: unit-testing asynchronous mocking pytest python-3.5


    【解决方案1】:

    重要的是补丁应用顺序, 最后一个参数是顶部的补丁,第一个参数是底部的补丁n

       @unittest_run_loop
       @patch(__name__ + '.test_coro2', side_effect=(lambda: mock_test_coro2()))
       @patch(__name__ + '.test_coro', side_effect=(lambda id: mock_test_coro(id)))
       async def test_1(self, test_coro, test_coro2):
           await test_coro2()
           await test_coro(0)
    

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多