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