[英]Patch - How to check that a patched class's instance called a class function?
[英]How to patch a class in python unit test and get a handle on patched object's return value
我正在使用Mock 2.0.0庫在Python 2.7中測試類的方法
這就是被測方法的樣子:
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裝飾器。 我的測試如下所示:
從模擬導入unittest從導入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的模擬值是什么。
有人知道如何解決這個問題嗎? 或者是否有更好的方法來模擬python庫(如joblib)及其方法(如load)並獲取該模擬對象的句柄?
class TestClass(unittest.TestCase):
@patch('path.to.module.joblib.load') # You path is probably wrong here
def test_MethodUnderTest(self, mockJoblibLoad):
# Set the side_effect if you want to return different things on
# each iteration e.g. mockJoblib.side_effect = [...]
mockJoblibLoad.return_value = ...
test_dict = {"v1": "p1.pkl"}
expect = {"v1": mockJoblibLoad.return_value}
actual = ClassUnderTest.MethodUnderTest("whateverpath", dict)
self.assertEqual(expect, actual)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.