首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:模拟文件以进行单元测试

Python:模拟文件以进行单元测试
EN

Stack Overflow用户
提问于 2016-05-10 22:49:10
回答 1查看 9.1K关注 0票数 2

我正在为脚本中的函数编写单元测试,但是在创建模拟文件时遇到了问题。我的函数接受一个文件名,并输出它的md5值。

代码语言:javascript
运行
复制
def md5(file_name):
    #Function to return the md5 value of a file
    hash_md5 = hashlib.md5()
    with open(fname, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

我目前的单元测试:

代码语言:javascript
运行
复制
import mock
class Function_to_test_TestCase(unittest.TestCase):

    def test_filename(self):
        with mock.patch('__main__.open', mock.mock_open(read_data=''), create=True) as m:
            md5_value=my_script.function_to_get_md5_value(m)

然而,我得到了错误:

代码语言:javascript
运行
复制
with open(fname, "rb") as f:
TypeError: coercing to Unicode: need string or buffer, MagicMock found

这种方法是用相关的模拟md5值制作模拟文件的正确方法吗?任何建议都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-11 00:06:10

也许你应该将read_data指定为二进制?下面是一个工作示例,您可以将其粘贴到文件中并使用unittest运行:

代码语言:javascript
运行
复制
import hashlib
from unittest import TestCase

import mock


def md5(file_name):
    hash_md5 = hashlib.md5()
    with open(file_name, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()


class MD5TestCase(TestCase):
    def test(self):
        with mock.patch('%s.open' % __name__, mock.mock_open(read_data=b'aaa'), create=True) as m:
            result = md5("lalala")
            self.assertEqual(result, '47bce5c74f589f4867dbd57e9ca9f808')

答案基于答案:How do I mock an open used in a with statement (using the Mock framework in Python)?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37141975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档