python - 如何在 pytest 中为模拟函数提供不同的返回值?

标签 python python-3.x unit-testing mocking pytest

这是要测试的函数:

def func_to_be_tested():
    output_first = func1()
    output_second = func1()
    .... rest of function

# func1 will be mocked while testing func_to_be_tested

我希望 output_firstoutput_second 不同,即在模拟时,它们应该在同一测试调用中具有不同的 func1 返回值函数func_to_be_tested

有什么办法可以做到这一点吗?

谢谢

最佳答案

这就是 side_effect是为了.您可以为 side_effect 分配一个列表,列表中的每个值将用作后续调用的结果,例如:

from unittest import mock
from path_to_module import func_to_be_tested

@mock.patch('path_to_module.func1')
def test_func_to_be_tested(mocked_func1):
    mocked_func1.side_effect = [output_first, output_second]
    func_to_be_tested()

在这种情况下,func1 将在第一次调用中返回 output_first,并在第二次调用中返回 output_second

关于python - 如何在 pytest 中为模拟函数提供不同的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61463328/

相关文章:

unit-testing - Grails:从模拟服务返回模拟对象

python - Flask Jinja 路线

python:友好数字检查

python - 使用 Flask 和 WTForms 时出现 csrf_token 问题

python - pytest - 如何使其递归搜索?

Python:Mysql Escape 函数生成损坏的查询

python - 仅模拟副作用 X 次

java - 无需依赖注入(inject)的单元测试

Python 正则表达式字符串组捕获

python - SQL删除重复行