我和我的讲师发生争执 - 他坚持认为对象可以作为side_effect的值传递给mock.patch来模拟程序中的原始函数,同时仍然将传递给该函数的参数传递给 - 在这种特殊情况下,将它们存储在对象中。
基本上:
with mock.patch('function_to_be_mocked', side_effect=my_object) as m:
function_to_be_mocked(arg1, arg2)
在这两行代码之后,arg1和arg2将作为属性存储在my_object中。
但是根据side_effect的文档,可以传递给side_effect的唯一对象是Exceptions或iterables,并且都不关心传递给原始函数的参数。
我试图指出这个错误,但我的讲师说有办法解决这个问题。
有没有办法实现,或者只是我的讲师拒绝承认他的错误?
答案 0 :(得分:0)
我认为他是对的。我们可以将callable分配给side_effect,并且将使用与function_to_be_mocked
和arg1
调用的arg2
相同的参数来调用该callable。
源和示例: https://docs.python.org/3.6/library/unittest.mock.html#unittest.mock.Mock.side_effect