我不明白为什么无法在此示例中模拟NamedTemporaryFile.name:
from mock import Mock, patch
import unittest
import tempfile
def myfunc():
with tempfile.NamedTemporaryFile() as mytmp:
return mytmp.name
class TestMock(unittest.TestCase):
@patch('tempfile.NamedTemporaryFile')
def test_cm(self, mock_tmp):
mytmpname = 'abcde'
mock_tmp.__enter__.return_value.name = mytmpname
self.assertEqual(myfunc(), mytmpname)
测试结果在:
AssertionError: <MagicMock name='NamedTemporaryFile().__enter__().name' id='140275675011280'> != 'abcde'
您设置的模拟错误:mock_tmp
不是上下文管理器,而是返回了一个上下文管理器。将您的设置行替换为:
mock_tmp.return_value.__enter__.return_value.name = mytmpname
这样您的测试就可以了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句