2013-08-03 106 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

感謝您的幫助,解決了問題。 –