0
我在Python 2.7使用模擬2.0.0圖書館如何修補在Python單元測試類和修補對象的返回值獲得一個句柄
下面是測試方法看起來像測試類的方法:
from sklearn.externals import joblib
class ClassUnderTest():
def MethodUnderTest(self, path, myDict):
newDict= {}
for key, val in myDict.iteritems():
retVal= (joblib.load(path + val))
newDict[key] = retVal
return newDict
現在,我的意圖是測試MethodUnderTest,但模擬joblib.load,而不是現實中調用它。所以,爲了達到這個目的,我使用了Mock庫中的@patch裝飾器。我的測試看起來如下:
進口單元測試 從模擬進口MagicMock,補丁 從sklearn.externals進口JOBLIB 進口ClassUnderTest
class TestClass(unittest.TestCase):
@patch('ClassUnderTest.joblib')
def test_MethodUnderTest(self, mockJoblibLoad):
dict = {"v1": "p1.pkl"}
retVal = ClassUnderTest.MethodUnderTest("whateverpath", dict)
現在,如果我必須在retVal的的關鍵字和值斷言反對的東西,那是基於joblib.load的模擬返回值。如果我以某種方式知道這個值,我將能夠知道MethodUnderTest返回的內容。
這裏的問題是,我不知道什麼時候它是使用@patch裝飾嘲笑joblib.load的嘲弄價值是什麼。
是否有人知道如何解決這個問題?或者,如果有更好的方法來模擬像joblib這樣的python庫和它們的方法(比如加載並獲取該模擬對象的句柄)?
這工作得很好。所以我在代碼中遺漏的是補丁中的錯誤路徑。我一直沒有完成,直到.load,即我試圖存根的joblib下的方法名稱。然後,mockJoblibLoad.return_value =「somemockvalue」也可以正常工作。謝謝 – Hary