2013-06-24 151 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