加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

模拟打开python中的单元测试

发布时间:2020-12-20 11:37:51 所属栏目:Python 来源:网络整理
导读:我想使用unittest测试一个使用上下文管理器从文件读取的方法: with open(k_file,'r') as content_file: content = content_file.read() 我不想在我的系统上创建一个文件,所以我想嘲笑它,但我现在并没有太大的成功.我找到了mock_open,但我真的不明白我应该如
我想使用unittest测试一个使用上下文管理器从文件读取的方法:

with open(k_file,'r') as content_file:
    content = content_file.read()

我不想在我的系统上创建一个文件,所以我想嘲笑它,但我现在并没有太大的成功.我找到了mock_open,但我真的不明白我应该如何使用它并在我的测试用例中将mock作为content_file提供.这里有例如post,但是我不明白在不修改原始代码的情况下如何在测试用例中编写这个.

有人能指出我正确的方向吗?

解决方法

mock_open()是要走的路;你使用mock_open()调用的结果在你的代码中打开补丁:

mocked_open = unittest.mock.mock_open(read_data='file contentsnas neededn')
with unittest.mock.patch('yourmodule.open',mocked_open,create=True):
    # tests calling your code; the open function will use the mocked_open object

patch() context manager将open()全局放入你的模块(我将其命名为yourmodule),绑定到mocked_open() – 生成的对象.该对象将在调用时假装生成文件对象.

这个模拟文件对象唯一不会做的就是迭代;你不能在content_file中用它做行,至少在当前版本的mock库中不行.有关解决方法,请参阅Customizing unittest.mock.mock_open for iteration.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读