首页 > 解决方案 > 在python中一起调用两个函数调用时如何修补它们

问题描述

我有一个使用下面代码的函数。

def get_doc_hash(doc):
       return hashlib.md5(doc.encode(‘utf-8’)).hexdigest()

如何模拟 md5() 和 hexdigest() 的调用来为这个函数编写测试用例?

标签: pythonmockingpython-unittestpython-mock

解决方案


正如评论中所指出的,最好测试预期的行为,但纯粹是为了展示如何链接模拟,这里是如何完成的:

import hashlib
import unittest
from unittest.mock import patch


def get_doc_hash(doc):
    return hashlib.md5(doc.encode("utf-8")).hexdigest()


class TestHash(unittest.TestCase):
    @patch('hashlib.md5')
    def test_get_doc_hash_to_demonstrate_mock_chaining(self, mock_hashlib):
        mock_hashlib.return_value.hexdigest.return_value = "digested"
        hash_out = get_doc_hash("test doc")
        mock_hashlib.assert_called_once_with("test doc".encode("utf-8"))
        mock_hashlib.return_value.hexdigest.assert_called_once()
        self.assertEqual(hash_out, "digested")

推荐阅读