2016-01-24 55 views
1

我想測試一個huey任務,並且需要打補丁requests.get。運行測試如何在huey任務中進行模擬/猴子修補?

# huey_tasks.py 

from huey import RedisHuey 

huey = RedisHuey() 

@huey.task() 
def function(): 
    import requests 
    print(requests.get('http://www.google.com')) 

文件:

import huey_tasks 

@patch('requests.get') 
def call_patched(fake_get): 
    fake_get.return_value = '1' 
    huey_tasks.function() 

啓動huey_consumer:huey_tasks.huey -w 10 -l logs/huey.log
運行測試,但是打補丁並沒有任何影響。

[2016-01-24 17:01:12,053] INFO:requests.packages.urllib3.connectionpool:Worker-1:Starting new HTTP connection (1): www.google.com 
[2016-01-24 17:01:12,562] INFO:requests.packages.urllib3.connectionpool:Worker-1:Starting new HTTP connection (1): www.google.com.sg 
<Response[200]> 

如果我刪除@huey.task()裝飾,修補工程和1被打印出來。

那麼應該怎麼測試休伊任務?畢竟,我無法每次刪除裝飾器,都必須是更好的方法。

回答

0

如果我正確讀取,這是你的問題

  • 休伊任務在一個單獨的消費過程

  • 單元測試在自己的進程都跑

過程不能嘲笑或另一個補丁。無論是

  • 讓你的代碼路徑,使您不必嘲笑補丁消費過程......不直接調用任務,而且使您可以公開的功能和修補

  • 運行休伊使用線程

0

確定您的測試過程中,終於找到了一個方法來測試

# huey_tasks.py 

def _function(): 
    import requests 
    print(requests.get('http://www.google.com')) 

function = huey.task()(_function) 
import huey_tasks 

重要的部分是首先定義實際的任務函數然後裝飾它。請注意,huey.task是需要參數的裝飾器。

@patch('requests.get') 
def test_patched(fake_get): 
    fake_get.return_value = '1' 
    huey_tasks._function() 

直接運行測試代碼而不啓動huey_consumer