2013-08-03 104 views
0

我在我的项目中创建了多个unit_test文件。 当我独立运行所有测试文件时,所有文件都会通过所有测试用例。python模拟补丁错误

但是,当我经过的TestRunner运行所有测试,我得到错误的

TypeError: 'NoneType' object is not callable. 

我已经注意到这个错误是因为打补丁的抛出。

====================================================================== 
ERROR [0.001s]: test_create_pull_requests (test_custom_logs_manager.TestCustomLogManager) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/x/local/dmali/githome/am-repo/unit_tests/lib/mock/mock.py", line 1201, in patched 
    return func(*args, **keywargs) 
    File "/x/local/dmali/githome/am-repo/unit_tests/data_process/caldata/test_custom_logs_manager.py", line 71, in test_create_pull_requests 
    cal_handlers) 
TypeError: 'NoneType' object is not callable 

... 

代码段:

@patch('data_process.caldata.custom_logs_manager.CustomLogsPullTrack', 
     MagicMock(return_value = MockCustomLogsPullTrack())) 
def test_create_pull_requests(self): 
    """ 
    Unit Test for create_pull_requests 
    """ 
    report_times = [datetime.datetime.now()] 
    group_id = 1 
    data_center = MockDataCenterCalLoc() 
    data_center_cal_loc_id = 1 
    mock_pull_config = MockPayMonCalBizConfig() 
    mock_pull_config.id = 1 
    cal_handlers = {'TEST_CAL': 'TEST_CLASS'} 
    result = custom_logs_manager.create_pull_requests(report_times, 
                 group_id, 
                 data_center, 
                 data_center_cal_loc_id, 
                 mock_pull_config, 
                 cal_handlers) 

    self.assertEqual(result[0].paymon_calbiz_config_id, 1) 
    self.assertEqual(result[0].pool_name, 'TEST') 
    self.assertEqual(result[0].data_center_cal_loc_id, 1) 

+0

它看起来像你不正确地设置你的嘲笑。虽然没有查看整个源代码,但我无法确定。我不清楚你为什么嘲笑一堂课,但后来调用一个函数,并期望它被嘲笑。也许更仔细地看看你的代码,花些时间调试。 – Greg

回答

1

我们在单元测试框架有类似的问题。如果通过单元测试测试的方法具有装饰器“transaction.commit_manually”,则需要在单元测试方法中使用相同的装饰器。否则,你会得到这个消息“没有类型的对象不可调用”,这将不会提供有关实际问题的线索。

+0

感谢您的帮助,解决了问题。 –