- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
mock.reset_mock()
不会重置副作用迭代器。有没有一种方法可以做到这一点而无需再次创建模拟?
>>> from mock import MagicMock
>>> mock = MagicMock(side_effect = [1,2])
>>> mock(), mock()
(1, 2)
>>> mock()
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
mock()
File "C:\Python27\Lib\site-packages\mock.py", line 955, in __call__
return _mock_self._mock_call(*args, **kwargs)
File "C:\Python27\Lib\site-packages\mock.py", line 1013, in _mock_call
result = next(effect)
StopIteration
>>> mock.reset_mock()
>>> mock()
Traceback (most recent call last):
...
StopIteration
>>> mock = MagicMock(side_effect = [1,2])
>>> mock(), mock()
(1, 2)
>>>
目的是在后续测试中重新使用模拟,但我怀疑它不能像生成器一样重新启动。
所以(迟到总比不到好)在被指向正确的方向后,我查看了 mock.py
并发现 side_effect
是一个迭代器对象(不能是 < em>重置一旦耗尽):
def __set_side_effect(self, value):
value = _try_iter(value)
...
def _try_iter(obj):
...
try:
return iter(obj)
except TypeError:
# XXXX backwards compatibility
# but this will blow up on first call - so maybe we should fail early?
return obj
和def reset_mock()
没有解决副作用。
最佳答案
正如 user2357112 评论的那样,重新分配 side_effect
将解决您的问题。
>>> from mock import MagicMock
>>>
>>> lst = [1, 2]
>>> mock = MagicMock(side_effect=lst)
>>> mock(), mock()
(1, 2)
>>> mock.side_effect = lst # <-------
>>> mock(), mock()
(1, 2)
关于python - 模拟 side_effect 迭代器用完后可以重置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25826180/
在装饰器中传递 side_effect 与在函数中设置有什么区别?我什么时候应该使用一个? @patch(“my_class.Order.get_order”, side_effect=“moc
在模拟中,我希望某个函数在测试中返回一个新值。我就是这样做的。 Class MyClass: my_var = None def foo(self, var1):
我在名为“my_module”的模块中的名为“my_class”的类中有一个函数,该模块包含以下代码段: try: response = self.make_request_response(re
mock.reset_mock() 不会重置副作用迭代器。有没有一种方法可以做到这一点而无需再次创建模拟? >>> from mock import MagicMock >>> mock = Magi
我有一个像下面这样的单元测试: # utilities.py def get_side_effects(): def side_effect_func3(self): # N
我正在尝试在 Python 中模拟具有副作用的实例方法。我希望/期望使用初始“self”参数来调用我的副作用,我可以用它来确定返回值。 所以我有这样的东西: import mock class T
我有这个类 Foo,它的函数使用我在其构造函数中初始化的数据帧。我想在我的测试类 FooTest 中测试它的功能。 from src.shared.utils import get_spark_dat
有没有办法在 side_effect 中使用 mock 临时撤消修补?特别是我想做这样的事情: from mock import patch import urllib2 import unittes
因此示例代码非常基础: @mock.patch.object(BookForm, 'is_valid') def test_edit(self, mocked_is_valid): creat
我正在使用 patch来自 unittest.mock在我的测试中更改远程 API 调用的行为。 我有三个不同的函数,它们返回三个不同的 json表示要从 API 返回的模拟数据的文件。对于每个模拟
是否可以有Mock对象在调用时返回一个值并在调用时执行一条语句?例如这个: > mocked_func = Mock(return_value='Returned foo',
我正在测试一个读取文件、对内容进行操作并根据所看到的内容返回一个值的函数。我测试的函数 testme 位于 module.py 中。我正在运行 python 2.7。我知道我可以用 import un
我必须说我是 python mock 的新手。我有一个side_effect 迭代器: myClass.do.side_effect = iter([processStatus, memoryStat
为了测试一个轮询函数,我想模拟一个子函数的调用,这样第一次调用它就会失败,第二次调用它就会成功。这是它的一个非常简化的版本: poll_function(var1): value = sub_
我正在尝试在 Python 类中练习以下方法: def find_tests(self): tests_dir = glob.glob("tests/*") if not tests_
from unittest.mock import patch def get_title(): return 'title' def get_msg(): return 'msg'
我是一名优秀的程序员,十分优秀!