2016-01-24 76 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