【发布时间】:2017-11-17 09:46:02
【问题描述】:
我正在使用 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 装饰器。我的测试如下:
导入单元测试 从模拟导入MagicMock,补丁 从 sklearn.externals 导入作业库 导入 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 库及其方法,例如加载并获取该模拟对象的句柄?
【问题讨论】:
标签: python python-unittest python-mock