python:assert\u有取循环中最后一个值的\u调用

2024-05-04 00:09:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于foo的函数,我正在尝试使用以下代码对其进行测试

from unittest.mock import call, patch

def foo():
    x = {}
    for i in range(3):
        x["val"] = i
        print(x)

@patch('builtins.print')
def test_foo(print_mock):
    foo()
    calls = calls = [call({'val': 0}), call({'val': 1}), call({'val': 2})]
    print_mock.assert_has_calls(calls)

test_foo()

但它给出了以下错误

File "/usr/lib/python3.8/unittest/mock.py", line 950, in assert_has_calls
    raise AssertionError(
AssertionError: Calls not found.
Expected: [call({'val': 0}), call({'val': 1}), call({'val': 2})]
Actual: [call({'val': 2}), call({'val': 2}), call({'val': 2})]

我认为问题在于它采用了调用函数的最后一个值。 希望能有一个修复或其他方法来测试foo函数

更新

python文档对此问题有一些建议


1条回答
网友
1楼 · 发布于 2024-05-04 00:09:04

我认为你做到了这一点

  1 from unittest.mock import call, patch
  2 
  3 def foo():
  4     x = {}
  5     for key, value in zip(range(3), range(3)):
  6         x[key] = value
  7         print(x)
  8 
  9 @patch("builtins.print")
 10 def test_foo(print_mock):
 11     foo()
 12     calls = [call({0: 0, 1: 1, 2: 2})]
 13     print_mock.assert_has_calls(calls)
 14 
 15 test_foo()

相关问题 更多 >