gpt4 book ai didi

python - 当 python 模拟同时具有返回值和副作用列表时会发生什么?

转载 作者:行者123 更新时间:2023-12-03 18:14:06 27 4
gpt4 key购买 nike

我无法理解某些测试代码中发生的情况。它看起来像这样:

import pytest
from unittest.mock import MagicMock
from my_module import MyClass

confusing_mock = MagicMock(
return_value=b"",
side_effect=[
ConnectionError(),
b"another_return_value?",
b"another_another_return_value?"
])

mocked_class = MyClass()
monkeypatch.setattr(mocked_class, "method_to_call_thrice", confusing_mock)

我知道:
  • side_effect是每当调用模拟时要调用的函数
  • 但如果 side_effect是一个可迭代的,那么“对模拟的每次调用都会
    返回可迭代对象的下一个值”(感谢 pytestdocs)
  • 文档还说,如果函数传递给 side_effect返回 DEFAULT ,然后模拟将从中返回它的正常值return_value

  • 但这是我没有得到的:
  • 如果我提供 会发生什么两者 副作用列表 和一个
    返回值 ?
  • 我应该期待在每次调用 MyClass.method_to_call_thrice 时看到什么?
  • 最佳答案

    side_effect用来。列表值可以包含 mock.DEFAULT , 一个函数可以返回 mock.DEFAULT , 表示 return_value 的值属性被使用。

    >>> import unittest.mock
    >>> m = unittest.mock.Mock(return_value="foo",
    ... side_effect=[1, 2, unittest.mock.DEFAULT, 4, 5])
    >>> m()
    1
    >>> m()
    2
    >>> m()
    'foo'
    >>> m()
    4
    >>> m()
    5
    >>> unittest.mock.Mock(return_value="foo",
    ... side_effect=lambda: unittest.mock.DEFAULT)()
    'foo'

    关于python - 当 python 模拟同时具有返回值和副作用列表时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191199/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com