2015-11-20 20 views
1

有沒有辦法在Python中知道從unittest執行或調試運行的上下文中調用函數?Python:知道函數是從unittest調用的?

對於上下文,我試圖對使用函數執行數據庫調用的代碼進行單元測試。爲了避免在該函數測試期間調用數據庫(分別測試數據庫調用),我試圖讓數據庫IO功能知道它們的環境,並模擬它們在單元測試中被調用並在調試過程中記錄附加變量跑。

我目前的看法是讀取/寫入環境變量,但它似乎有點矯枉過正,我認爲Python必須有一個更好的機制。

編輯: 這是一個功能我想單元測試的例子:

from Database_IO import Database_read 

def some_function(significance_level, time_range) 
    data = Database_read(time_range) 
    significant_data = data > significance_level 
    return significant_data 
+0

你能不能注入模擬?你有點試圖向後做,這可能是你的代碼設計不正確的一個標誌。 –

+5

你應該在你的測試/測試框架中模擬數據庫調用。這使您的應用程序代碼保持清潔 –

+0

但是,如果對數據庫IO功能的調用在我願意測試的函數內,我該怎麼做? – chiffa

回答

6

在我看來,如果你寫你的函數在測試時用不同的方式來表現,你是不是真的測試它。

要測試函數我會mock.patch()數據庫對象,然後檢查它在你的函數中是否正確使用。

開始使用模擬庫時最困難的事情是找到the correct object to replace

在您的例子,如果你your_moduleDatabase_IO模塊導入Database_read對象,你可以通過使用類似的代碼測試它的按照你的對象

with mock.patch('your_module.Database_read') as dbread_mock: 
    # prepare the dbread_mock 
    dbread_mock.return_value = 10 
    # execute a test call 
    retval = some_function(3, 'some range') 
    # check the result 
    dbread_mock.assert_called_with('some range') 
+0

這是正確的答案。 – Marcin

相關問題