【发布时间】:2014-11-30 03:31:41
【问题描述】:
我是 Python 新手,我试图仅在传递特定参数时模拟一个函数。如果传递的不是所需的参数,我想调用原始函数。
在 Python 2.7 中,我尝试过这样的事情:
from foo import config
def test_something(self):
original_config = config # config is a Module.
def side_effect(key):
if key == 'expected_argument':
return mocked_result
else:
return original_config.get(key)
config.get = Mock(side_effect=side_effect)
# actualy_test_something...
它不起作用,因为original_config 不是config 的副本。它引用了相同的模块,最终进入无限循环。我可以尝试克隆原始的 config 模块,但这似乎有点矫枉过正。
我可以使用类似于RSpec's mocks 的东西吗?例如:
obj.stub(:message).with('an_expected_argument').and_return('a_mocked_result')
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
config.get = Mock...行的缩进是否正确? -
@PetrGladkikh 是的,没错。
-
那我就不明白是怎么执行的了。
if上面的两个分支都以return结尾,所以这条线似乎永远都没有到达。
标签: python python-2.7 python-mock