问题描述
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个以上的模拟,则会以随机顺序随机播放)
对于同步功能,它工作正常
解决方法
重要的是补丁应用顺序, 最后一个参数是顶部的补丁,第一个参数是底部的补丁
@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)