gpt4 book ai didi

python - 如何对函数内部进行的函数调用序列进行单元测试 [python]

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:13 25 4
gpt4 key购买 nike

我想对一个函数进行单元测试,并断言函数调用的顺序是否在函数 workflow() 内进行。类似的东西,

      [1st called] fetch_yeargroup_ls()
[2nd called] invoke_get_links().......

我搜索了许多讨论,但从未找到回答我问题的人。

最佳答案

如果您使用 mock在修补这些函数时,您可以创建模拟作为父模拟的属性:

try:
# Python 3
from unittest.mock import MagicMock, patch, call
except ImportError:
# Python 2, install from PyPI first
from mock import MagicMock, patch, call
import unittest

from module_under_test import function_under_test

class TestCallOrder(unittest.TestCase):
def test_call_order(self):
source_mock = MagicMock()
with patch('module_under_test.function1', source_mock.function1), \
patch('module_under_test.function2', source_mock.function2), \
patch('module_under_test.function3', source_mock.function3)

# the test is successful if the 3 functions are called in this
# specific order with these specific arguments:
expected = [
call.function1('foo'),
call.function2('bar'),
call.function3('baz')
]

# run your code-under-test
function_under_test()

self.assertEqual(source_mock.mock_calls, expected)

因为这 3 个函数附加到 source_mock,所以对它们的所有调用都记录在 Mock.mock_calls 中的父 mock 对象上。属性,您可以断言他们的调用顺序。

我只是通过在 source_mock 对象上查找它们作为属性来附加 3 个函数模拟,但您也可以使用 Mock.attach_mock() method将您以不同方式创建的模拟附加到父级。

关于python - 如何对函数内部进行的函数调用序列进行单元测试 [python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31913232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com