【问题标题】:reset_mock() got an unexpected keyword argument 'return_value' — why?reset_mock() 得到了一个意外的关键字参数“return_value”——为什么?
【发布时间】:2020-01-23 15:59:57
【问题描述】:

根据unittest.mock.reset_mock 文档,reset_mock 接受return_valueside_effect 关键字参数。但是当我尝试使用它时,我得到了一个 TypeError:

from unittest.mock import patch
import pandas

def foo():
    return pandas.read_csv("/dev/null")

@patch("pandas.read_csv", autospec=True)
def test_foo(pr):
    pr.return_value = 42
    foo()
    pr.reset_mock(return_value=True)
    foo()

使用pytest 运行会得到:

============================= test session starts ==============================
platform linux -- Python 3.7.3, pytest-5.3.0, py-1.8.0, pluggy-0.13.0
rootdir: /tmp
plugins: mock-1.12.1, cov-2.8.1
collected 1 item

mwe17.py F                                                               [100%]

=================================== FAILURES ===================================
___________________________________ test_foo ___________________________________

pr = <function read_csv at 0x7fdeff5ddbf8>

    @patch("pandas.read_csv", autospec=True)
    def test_foo(pr):
        pr.return_value = 42
        foo()
>       pr.reset_mock(return_value=True)
E       TypeError: reset_mock() got an unexpected keyword argument 'return_value'

mwe17.py:11: TypeError
============================== 1 failed in 2.83s ===============================

当我模拟 os.mkdir 而不是 pandas.read_csv 时,它确实有效。

为什么reset_mock 在模拟一个函数时不能接受这个关键字参数,而模拟另一个函数呢?

【问题讨论】:

    标签: python unit-testing mocking


    【解决方案1】:

    patch 调用中删除autospec=True 为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2021-03-17
      • 2020-10-01
      • 2018-06-19
      相关资源
      最近更新 更多