Pytest中Mock内部调用函数使其返回传入值的正确方法
让Mock函数返回传入的参数(Pytest场景)
要让被Mock的add_one返回传入它的原参数,不能用固定的return_value,得用side_effect来指定动态返回逻辑——side_effect可以接收一个可调用对象,让它直接返回传入的参数即可。
修改后的测试代码如下:
from module import add_eleven from unittest.mock import patch def test_add_one(): from module import add_one n = add_one(0) assert 1 == n @patch('module.add_one') def test_add_eleven(mock_add_one): # 让mock返回传入的第一个参数 mock_add_one.side_effect = lambda x: x n = add_eleven(0) assert 10 == n
说明
side_effect的作用是替代固定返回值,这里用lambda函数直接返回传入的参数,这样不管add_one被传入什么数值,都会原封不动返回。- 这样
add_eleven执行n = add_one(n)后,n的值不会改变,后续加10就能得到预期的10,符合断言要求。
如果要兼容多参数的场景,也可以写成更通用的形式:
mock_add_one.side_effect = lambda *args: args[0]
内容的提问来源于stack exchange,提问作者trey hannam
相关产品推荐
相关产品推荐

