2016-12-14 99 views
0

我想嘲笑了一种这样的单元测试:Python的模拟返回值

get_tree_test.py

from company.marketing_tree import get_tree 

class MidNightTests(TestCase): 
@mock.patch("company.analytics.get_fb_data", autospec=True) 
    def test_first_midnight(self, mock_fb_data): 
     mock_fb_data.return_value = {} 
     get_tree() 

get_tree。 PY

from company.analytics import get_fb_data 

def get_tree(): 
    executor = ThreadPoolExecutor(max_workers=2) 
    data_caller = executor.submit(get_data) 
    info_caller = executor.submit(get_info) 

def get_data(): 
    executor = ThreadPoolExecutor(max_workers=2) 
    first_data = exeuctor.submit(get_fb_data) 

我看到mock_fb_data.return_value = {}作为模拟对象创建的,但磨片n我调试get_data()方法我看到,get_fb_data是一个函数,而不是模拟

我错过了什么?

回答

2

您需要修补正确的位置。里面get_tree,您创建了一个全局命名get_fb_data,该代码直接使用:

from company.analytics import get_fb_data 

你需要修补那名,而不是原来company.analytics.get_fb_data名称;通过更换一个名字修补作品指向模拟代替:

class MidNightTests(TestCase): 
    @mock.patch("get_tree.get_fb_data", autospec=True) 
    def test_first_midnight(self, mock_fb_data): 
     mock_fb_data.return_value = {} 
     get_tree() 

unittest.mock文档的Where to patch section

+0

非常感谢! – Dejell