python - 模拟多参数函数,如何指定规格?
问题描述
我相信我的问题可能是我没有为补丁方法提供规范参数。您可以看到 autospec 也不起作用。注释行和未注释行都给出相同的结果。并且搜索“python模拟参数规范”并没有帮助,因为“规范”这个词太笼统了......
我有一个要测试的功能:
% cat fixTextFiles.py:
import os
from unittest.mock import patch
def fixFile(tables, dir, filename):
[...]
return None
还有一个我正在尝试编写的测试:
import os
import tableColumns
import unittest
import fixTextFiles
from unittest.mock import create_autospec
def test_fix_files(mocker):
rootdir = 'data_20209999/CalAccess/DATA/'
files = [rootdir + 'TEXT_MEMO.TSV', rootdir + 'SMRY.TSV']
mocker.patch('os.listdir', return_value=files)
mocker.patch('fixTextFiles.fixFile', return_value=None, autospec=True)
#mock_function = create_autospec('fixTextFiles.fixFile', return_value=None)
fixTextFiles.fixFiles(tableColumns.readTableColumns(), 'data_20209999/CalAccess/DATA', 'TEXT_MEMO.TSV')
结果:
============================= test session starts ==============================
platform darwin -- Python 3.7.3, pytest-6.0.0, py-1.9.0, pluggy-0.13.1
rootdir: /Users/ray/Projects/CalAccessImpls/open_calaccess_data_py
plugins: mock-3.2.0
collected 3 items
fetchSoSData_test.py .. [ 66%]
fixTextFiles_test.py F [100%]
=================================== FAILURES ===================================
________________________________ test_fix_files ________________________________
mocker = <pytest_mock.plugin.MockFixture object at 0x109623e80>
def test_fix_files(mocker):
rootdir = 'data_20209999/CalAccess/DATA/'
files = [rootdir + 'TEXT_MEMO.TSV', rootdir + 'SMRY.TSV']
mocker.patch('os.listdir', return_value=files)
mocker.patch('fixTextFiles.fixFile', return_value=None, autospec=True)
#mock_function = create_autospec('fixTextFiles.fixFile', return_value=None)
> fixTextFiles.fixFiles(tableColumns.readTableColumns(), 'data_20209999/CalAccess/DATA', 'TEXT_MEMO.TSV')
E TypeError: fixFiles() takes 1 positional argument but 3 were given
fixTextFiles_test.py:21: TypeError
=========================== short test summary info ============================
FAILED fixTextFiles_test.py::test_fix_files - TypeError: fixFiles() takes 1 p...
========================= 1 failed, 2 passed in 0.24s ==========================
解决方案
是的,这是飞行员错误的一个非常愚蠢的例子......
推荐阅读
- amazon-web-services - 如何从 EventBridge 规则中定义阶跃函数执行名称?
- python - 如何使用服务帐户将共享谷歌驱动器中的文件移动到垃圾箱
- java - 在 Amazon S3 存储桶上上传文件时出现 NoSuchMethoError
- docker - Azerothcore - Docker .env MySQL-密码不起作用
- reactjs - WebStorm 中的 Redux-toolkit 操作参数
- c++ - 使用 Catch2 时未解决的外部符号错误
- jenkins - 如何使用 jenkins 变量作为执行命令
- javascript - 使用 Javascript 从 JSON 响应中获取 HTML 标记值
- recharts - 如何在 Rechart 中计算自定义 CartesianGrid 的线条。如何重新映射到正确的域
- javascript - 在 JavaScript 中制作动态文本