【发布时间】:2020-01-23 15:59:57
【问题描述】:
根据unittest.mock.reset_mock 文档,reset_mock 接受return_value 和side_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