我有一个script.py
文件:
# in script.py
def my_basic_function(value, c):
return c(value).words()
class BasicClass:
def __init__(self, val):
self.val = val
def words():
return self.val
和一个test.py
文件:
# in test.py
from mock import patch
from script import my_basic_function, BasicClass
def third_function(self,):
return "not {}".format(self.val)
def fourth_function():
return "not ponies"
def init_mock(self, val):
self.val = val
@patch('script.BasicClass.words', third_function)
@patch('script.BasicClass.__init__', init_mock)
def test_my_basic_function():
assert my_basic_function("ponies", BasicClass) == "not ponies"
我可以pytest test.py
从命令行成功运行。
如果我想side_effect
在 my中使用@patch
,我必须做一些不同的事情:
@patch('script.BasicClass.words', side_effect = fourth_function)
@patch('script.BasicClass.__init__', init_mock)
def test_my_basic_function(amock):
assert my_basic_function("ponies", BasicClass) == "not ponies"
即,我必须:
- 添加一个
test_my_basic_function
我从不使用的参数。 - call
fourth_function
而不是third_function
,因为我不能使用任何类实例变量。
这两种方式打补丁有什么区别?