我正在嘲笑一个模块......这是我的示例代码
def test_validate(self):
"""Test Base Retriever Dataframe"""
sampleQuoteClass = self.sampleQuoteClass('ThisQuote')
bRet._getAsOfData = MagicMock(return_value=sampleQuoteClass)
dataAsDataFrame = bVal.validate(metaDataName='MyNewQuote')
self.assertTrue(len(dataAsDataFrame) > 0)
这样可以。
问题是 - bRet._getAsOfData也被模拟用于下一个测试,这些测试偶然地存在于其他测试类中。
仅当所有测试作为集合的一部分一起运行时才会出现此问题。
答案 0 :(得分:3)
听起来你可能想要patch对象,而不是直接嘲笑它。您可能需要调整我的示例以适合您的代码,但尝试这样的事情:
from mock import patch
def test_validate(self):
"""Test Base Retriever Dataframe"""
sampleQuoteClass = self.sampleQuoteClass('ThisQuote')
with patch('__main__.bRet') as mock_bRet:
mock_bRet._getAsOfData.return_value = sampleQuoteClass
dataAsDataFrame = bVal.validate(metaDataName='MyNewQuote')
self.assertTrue(len(dataAsDataFrame) > 0)
当您修补对象时,模拟将被撤消,一旦with
块退出,对象将“恢复正常”,因此模拟状态不会延续到您的其他测试。也可以使用patch
作为装饰器,但我总是更喜欢将它用作上下文管理器。有关每种用法的示例,请参阅上面链接的文档。
另外,根据我的经验,修补可能很棘手,所以我建议你也阅读this useful bit of documentation on "where to patch"。