如何解决如何从python3中的另一个模块模拟变量?
下面是我的源代码
#src.py
from common.configs import MANDATORY_FIELDS
def check_mf():
if set(MANDATORY_FIELDS).issubset(['a','b','c']):
return True
else:
raise Exception("Error in mandatory fields")
这是我的测试代码
#test_src.py
from unittest import TestCase,main,mock
from src import check_mf
class TestMailSenderUtil(TestCase):
def test_method(self):
with mock.patch('src.MANDATORY_FIELDS') as mocked_mf:
mocked_mf.return_value = ['a','c','d']
self.assertRaises(ValidationException,check_mf)
当我运行此代码时,测试未通过。它抛出一个错误说
AssertionError: ValidationException not raised by check_mf
为什么会出现这个错误? 仅供参考,当我在运行单元测试时尝试在 src.py 文件中打印 MANDATORY_FIELDS 时,我得到了这个
<MagicMock name='MANDATORY_FIELDS' id='139766761401144'>
为什么嘲笑在这里不起作用?
解决方法
变量 return_value
没有 MANDATORY_FIELDS
。只需将 new
值作为 的第二个参数传递。
例如(Python 3.9.2)
src.py
:
from configs import MANDATORY_FIELDS
class ValidationException(Exception):
pass
def check_mf():
print(MANDATORY_FIELDS)
if set(MANDATORY_FIELDS).issubset(['a','b','c']):
return True
else:
raise ValidationException("Error in mandatory fields")
configs.py
:
MANDATORY_FIELDS=['a']
test_src.py
:
from unittest import TestCase,main,mock
from src import check_mf,ValidationException
class TestMailSenderUtil(TestCase):
def test_method(self):
with mock.patch('src.MANDATORY_FIELDS',['a','c','d']) as mocked_mf:
self.assertRaises(ValidationException,check_mf)
if __name__ == '__main__':
main()
单元测试结果:
['a','d']
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Name Stmts Miss Cover Missing
----------------------------------------------------------------------
src/stackoverflow/68162471/configs.py 1 0 100%
src/stackoverflow/68162471/src.py 8 1 88% 9
src/stackoverflow/68162471/test_src.py 8 0 100%
----------------------------------------------------------------------
TOTAL 17 1 94%
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。