【发布时间】:2013-04-16 05:38:04
【问题描述】:
一段时间以来,我们一直在使用Mock for python。
现在,我们要模拟一个函数
def foo(self, my_param):
#do something here, assign something to my_result
return my_result
通常,模拟它的方法是(假设 foo 是对象的一部分)
self.foo = MagicMock(return_value="mocked!")
即使我调用 foo() 几次我也可以使用
self.foo = MagicMock(side_effect=["mocked once", "mocked twice!"])
现在,我面临一种情况,当输入参数具有特定值时,我想返回一个固定值。因此,如果假设“my_param”等于“something”,那么我想返回“my_cool_mock”
这似乎在mockito for python 上可用
when(dummy).foo("something").thenReturn("my_cool_mock")
我一直在寻找如何通过 Mock 实现同样的目标,但没有成功?
有什么想法吗?
【问题讨论】:
-
这个答案可能会有所帮助 - stackoverflow.com/a/7665754/234606
-
@naiquevin 这完美解决了老兄的问题,谢谢!
-
我不知道您可以将 Mocktio 与 Python 一起使用,为此 +1!
-
如果您的项目使用 pytest,出于这样的目的,您可能需要利用
monkeypatch。 Monkeypatch 更多的是“为了测试而替换此功能”,而 Mock 是您在还想检查mock_calls或断言调用它的内容等时使用的。两者都有一席之地,我经常在给定的测试文件中的不同时间同时使用两者。
标签: python unit-testing mocking mockito