在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
对其进行重构即可?今天晚些时候我可能会仔细看一看,现在我得跑了。