Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中更新模拟对象_Python_Unit Testing_Mocking_Tdd - Fatal编程技术网

在python中更新模拟对象

在python中更新模拟对象,python,unit-testing,mocking,tdd,Python,Unit Testing,Mocking,Tdd,我创建了一个模拟对象,如下所示: with patch('requests.get') as request: self.request = request self.request.session = MockSession() self.request.cookies = {} 如何通过另一个功能更新它如果要保存已修补的对象,必须手动启动和停止修补。如果使用上下文管理器(例如带有修补程序的),则修补程序将在退出作用域时恢复。 以下是您可以做的:

我创建了一个模拟对象,如下所示:

    with patch('requests.get') as request:
      self.request = request
      self.request.session = MockSession()
      self.request.cookies = {}

如何通过另一个功能更新它

如果要保存已修补的对象,必须手动启动和停止修补。如果使用上下文管理器(例如带有修补程序的
),则修补程序将在退出作用域时恢复。
以下是您可以做的:

类TestSomething(unittest.TestCase):
def设置(自):
self.patcher=patch('requests.get')#返回patcher对象
self.request=self.patcher.start()#返回已修补的对象
self.request.session=MockSession()
self.request.cookies={}
def拆卸(自):
sef.patcher.stop()
def测试03设置(自):
self.web\u session.set\u nonce(self.request)
self.assertTrue(len(self.request.cookies)>0,“设置当前失败”。)
请注意,我没有检查实际的测试-这取决于您的应用程序逻辑

您也可以在测试中直接进行修补:

@patch('requests.get'))
def测试03设置时间(自我,请求):
request.session=MockSession()
request.cookies={}
self.web\u session.set\u nonce(请求)
self.assertTrue(len(request.cookies)>0,“设置当前失败”。)

如何在
set\u nonce
中更新值?@asaf92:更新了我问题中的方法您在哪里进行修补?您使用的是
unittest
还是
pytest
?请注意,修补程序在超出范围后会恢复-这可能是您的问题,具体取决于您的结构。@Beanbremen先生,我不知道如何修补它。我正在使用unittest。你可能会分享我如何在这个例子中修补?谢谢分享。刚刚更新了我的测试类,但是request.cookies仍然失败您正在使用模拟对象调用
set\u nonce
addCookie
除了记录调用之外,不会执行任何操作。如果你想测试函数的行为,你不能模拟它。好的。那样的话,我该怎么办?在什么情况下应该使用模拟?我觉得有点不知所措,我不知道你的代码,但是你必须弄清楚你想测试什么,你想模仿什么。也许您不想模拟
请求。获取
(您将其命名为
请求
,这有点混乱),但只模拟会话?一般来说,它将有助于显示您正试图测试的代码(或a),并澄清您想要测试的内容。因此,我了解您在编辑3中的测试代码是有效的代码,您只需要使用
mock.patch
对其进行重构即可?今天晚些时候我可能会仔细看一看,现在我得跑了。