在 python 中一起调用两个函数调用时如何修补它们
How to patch two function calls when they are called together in python
我有一个使用以下代码的函数。
def get_doc_hash(doc):
return hashlib.md5(doc.encode(‘utf-8’)).hexdigest()
如何模拟 md5() 和 hexdigest() 的调用来为此函数编写测试用例?
正如评论中所指出的,测试预期行为会更好,但纯粹是为了展示如何链接模拟,这是如何完成的:
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")
我有一个使用以下代码的函数。
def get_doc_hash(doc):
return hashlib.md5(doc.encode(‘utf-8’)).hexdigest()
如何模拟 md5() 和 hexdigest() 的调用来为此函数编写测试用例?
正如评论中所指出的,测试预期行为会更好,但纯粹是为了展示如何链接模拟,这是如何完成的:
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")