gpt4 book ai didi

python - Pytest - 测试解析器错误 : Unrecognised arguments

转载 作者:行者123 更新时间:2023-11-28 20:21:46 26 4
gpt4 key购买 nike

我正在尝试测试一个非常简单的函数(由于多次尝试测试使用参数解析器作为参数的更复杂的函数失败)。

# from ./runfile.py

import argparse
import os


def get_input_args():
parser = argparse.ArgumentParser()
parser.add_argument('--priv_raw_name', default='private_data.csv', type=str,
help='Set raw private/source datafile name')
args = parser.parse_args()
return args

# from ./tests/test_args.py

import pytest
from runfile import get_input_args

def test_parser():
parser = get_input_args()
assert 1

当我运行脚本 runfile.py 时,一切都按预期工作,但是当我调用 pytest tests/test_args.py 时,我收到下面无法识别的参数错误消息。

我已经尝试设置一个 conftest.py 文件并使用 addoption,但我似乎遇到了更多错误,远远超出了我修复的经验。任何人都可以指出如何使用核心脚本中的默认参数运行测试但不调用 tests/test_args.py 作为实际测试本身的参数的正确方向吗?

    (Project_Cascade) ➜  Project_Cascade git:(WIP) ✗ pytest tests/test_args.py
========================================================================= test session starts =========================================================================
platform darwin -- Python 3.6.5, pytest-4.3.1, py-1.8.0, pluggy-0.9.0
rootdir: /Users/davidmellor/Code/Spend_Network/Data_Projects/Project_Cascade, inifile:
collected 1 item

tests/test_args.py F [100%]

============================================================================== FAILURES ===============================================================================
_____________________________________________________________________________ test_parser _____________________________________________________________________________

def test_parser():
> parser = get_input_args()

tests/test_args.py:5:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
runfile.py:50: in get_input_args
args = parser.parse_args()
/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py:1733: in parse_args
self.error(msg % ' '.join(argv))
/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py:2389: in error
self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = ArgumentParser(prog='pytest', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
status = 2, message = 'pytest: error: unrecognized arguments: tests/test_args.py\n'

def exit(self, status=0, message=None):
if message:
self._print_message(message, _sys.stderr)
> _sys.exit(status)
E SystemExit: 2

/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py:2376: SystemExit
------------------------------------------------------------------------ Captured stderr call -------------------------------------------------------------------------
usage: pytest [-h] [--priv_raw_name PRIV_RAW_NAME]
pytest: error: unrecognized arguments: tests/test_args.py

最佳答案

问题来自parser.parse_args接受可选的 args 参数的调用。如果未提供此参数,则参数取自 sys.argv .

当你执行pytest tests/test_args.py时,sys.argv包含['pytest', 'tests/test_args.py']。列表的第一个元素是被调用的程序,第二个是第一个参数。

因此,在没有其 args 参数的情况下调用 parser.parse_argstests/test_args.py 视为第一个声明参数的值解析器。幸运的是,它无法解析它并且出现错误并显示显式消息 unrecognized arguments: tests/test_args.py

要检查它,您可以在调用 parser.parse_args 和检查 sys.argv 之前在测试中添加断点

调用 pytest 而不指定要运行的文件(只是 pytest)应该可以顺利通过。

无论如何,无论以何种方式运行,您的测试都应该通过。为此,您只需为测试中的 parser.parse_args 调用指定明确的 args

例如,传递一个空列表将起作用:

parser.parse_args([])

但您可能希望使用 priv_raw_name 选项的值来测试它:

parser:parse_args(['--priv_raw_name', 'any/test/path'])

关于python - Pytest - 测试解析器错误 : Unrecognised arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55259371/

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