2013-06-24 152 views
4

在我的Python代码,我有全球requests.session例如:嘲讽会议

import requests 
session = requests.session() 

如何我Mock嘲笑呢?这种操作有没有装饰器?我尝试以下操作:

session.get = mock.Mock(side_effect=self.side_effects) 

但(如预期)此代码不会每次测试后返回session.get到原来的状态,就像@mock.patch装饰做。

回答

2

使用mock.patch在模块中修补会话。在这里,你走了,一个完整的工作示例https://gist.github.com/k-bx/5861641

+0

添加缩进。此代码不可读,并且不会修补会话。 –

+0

@amezhenin从gist评估代码。此代码可以工作,并且会修补会话。 –

+0

你可以让会议全球? –

1

有了一些灵感,从以前的答案和:

mock-attributes-in-python-mock

我可以嘲笑这样定义会话:

class MyClient(object): 
    """ 
    """ 
    def __init__(self): 
     self.session = requests.session() 

与即:(得到的电话返回一个响应,status_code属性设置为200)

def test_login_session(): 
    with mock.patch('path.to.requests.session') as patched_session: 
     # instantiate service: Arrange 
     test_client = MyClient() 
     type(patched_session().get.return_value).status_code = mock.PropertyMock(return_value=200) 

     # Act (+assert) 
     resp = test_client.login_cookie() 

     # Assert 
     assert resp is None