如何解决模拟连续呼叫
我有一些Python代码,其中我连续调用with open("f1") as f1:
d1 = json.load(f1)
# some_more_logic_here
with open("f2") as f2:
d2 = json.load(f2)
上下文管理器。
mock_open(read_data=json.dumps(some_dictionary)
我不确定如何模拟这些背靠背的电话。我可以用com.xxx.yyy.someClass$$Lambda$12345/7654321@qwert
来模拟第一次调用,但是不能使用与第一个不同的对象来模拟第二个上下文管理器调用。任何帮助将不胜感激。
解决方法
我无法获得mock_open
的控球权。但是使用低级模拟很容易:
from unittest.mock import patch,MagicMock
from yourmodule import yourfunc
def test_yourfunc():
first = MagicMock()
second = MagicMock()
first.__enter__.return_value.read.return_value = '{"k1": "v1"}'
second.__enter__.return_value.read.return_value = '{"k2": "v2"}'
with patch("yourmodule.open",side_effect=[first,second]):
d1,d2 = yourfunc()
assert d1 == {"k1": "v1"}
assert d2 == {"k2": "v2"}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。