class 的模拟补丁特定实例
Mock patch specific instance of class
如何使用 patch
模拟 class 的特定实例?
在我的测试文件中有:
@classmethod
def setUpClass(cls):
cls.instance_of_my_class = myClass()
其中一个测试然后调用 myClass
中的一个函数,我希望模拟 return 的值。
我可以这样做。
self.instance_of_my_class.cool_fuction = Mock(return_value=(True, True))
我希望使用 with patch
来做到这一点,这样模拟就不会持续到其他测试中, 或 以某种方式 unset 模拟。
但是,patch
需要一个像 "package.module.Class.attribute"
这样的字符串,因为它是目标,所以把
with patch("self.instance_of_my_class") as mock:
mock.return_value.cool_fuction.return_value = (True, True)
回溯失败
AssertionError: No module named 'self'
如果我像
这样修补 class
with patch("functions_folder.my_script.myClass") as mock:
mock.return_value.cool_fuction.return_value = (True, True)
修复了错误的实例 mock.called
returns False
测试看起来像:
def test_foo_function(self):
result = self.instance_of_my_class.foo_function()
self.assertTrue(result[0]["confirmed"])
和 foo_function
调用 cool_function
我想模拟 return (True, True)
感谢@johnsharpe 指出答案。
在 Test_myClass 开始时使用与我相同的 setUpClass:
@classmethod
def setUpClass(cls):
cls.instance_of_my_class = myClass()
工作测试用例现在看起来像:
@patch.object(myClass, "cool_function")
def test_foo_function(self, mock):
mock.return_value = (True, True)
result = self.instance_of_my_class.foo_function()
self.assertTrue(result[0]["confirmed"])
self.assertTrue(mock.called)
如何使用 patch
模拟 class 的特定实例?
在我的测试文件中有:
@classmethod
def setUpClass(cls):
cls.instance_of_my_class = myClass()
其中一个测试然后调用 myClass
中的一个函数,我希望模拟 return 的值。
我可以这样做。
self.instance_of_my_class.cool_fuction = Mock(return_value=(True, True))
我希望使用 with patch
来做到这一点,这样模拟就不会持续到其他测试中, 或 以某种方式 unset 模拟。
但是,patch
需要一个像 "package.module.Class.attribute"
这样的字符串,因为它是目标,所以把
with patch("self.instance_of_my_class") as mock:
mock.return_value.cool_fuction.return_value = (True, True)
回溯失败
AssertionError: No module named 'self'
如果我像
这样修补 classwith patch("functions_folder.my_script.myClass") as mock:
mock.return_value.cool_fuction.return_value = (True, True)
修复了错误的实例 mock.called
returns False
测试看起来像:
def test_foo_function(self):
result = self.instance_of_my_class.foo_function()
self.assertTrue(result[0]["confirmed"])
和 foo_function
调用 cool_function
我想模拟 return (True, True)
感谢@johnsharpe 指出答案。
在 Test_myClass 开始时使用与我相同的 setUpClass:
@classmethod
def setUpClass(cls):
cls.instance_of_my_class = myClass()
工作测试用例现在看起来像:
@patch.object(myClass, "cool_function")
def test_foo_function(self, mock):
mock.return_value = (True, True)
result = self.instance_of_my_class.foo_function()
self.assertTrue(result[0]["confirmed"])
self.assertTrue(mock.called)