gpt4 book ai didi

python - 在单元测试中使 docopt 解析包含空格的参数

转载 作者:行者123 更新时间:2023-12-04 04:48:26 24 4
gpt4 key购买 nike

我在让 docopt 将包含空格的参数解析为适当的字典对象以用于我的单元测试时遇到问题。

这是我目前用来构造 docopt 解析的参数列表的代码:

testargs = []

def clear_args():
testargs[:] = []
return

def add_testfiles(file1='defaultfile1.txt', file2='defaultfile2.txt'):
clear_args()
testargs.append('--debug')
testargs.append(file1)
testargs.append(file2)
return

def parse_args(optlist):
argstr = ' '.join(optlist)
return docopt(downpost.__doc__, argv=argstr)

我正在为其编写单元测试的代码有 2 个测试,它们分别给出了以下参数:
-t <title>  # <title> can be any string (with spaces) inside quotation marks
"A Filename with Spaces.txt" # any filename as long as it's in quotation marks

例如,要添加 -t 参数,我会这样做:
def test_exampleunittest(self):
add_testfiles()
testargs.append('-t "This is the title I want"')
self.args = parse_args(testargs)
self.post = myPythonScript.process(self.args)
self.assertEqual(self.post['Subject'], 'This is the title I want')

如果我使用上述参数运行我自己测试的脚本,它们会被毫无问题地接受,并且输出符合预期。

但是,如果我运行使用包含空格的参数的单元测试,我会得到以下信息:
DocoptExit: Usage: myPythonScript [options] <file_1> <file_2>

其他需要相同 dict 对象(包含相同参数)的单元测试工作正常。

我应该在我的代码中更改什么以使 docopt 像往常一样解析参数?

最佳答案

docopt 需要 argv参数为字符串或列表。

  • 如果它是一个列表,它会将列表中的每个项目解释为一个单独的参数。
  • 如果它是一个字符串,它将使用 .split() 将字符串拆分为一个列表。 .这样你就失去了所有的空白。

  • 所以为了让你的测试工作,你应该传递一个列表而不是将它加入一个字符串 argstr = ' '.join(testargs) .

    这种混淆可能是由于将字符串传递给 argv 是未记录的。事实上,它不是 API 的一部分,只是一个实现细节。您不应该依赖于 docopt argv 的事实。需要一个字符串——这可能会消失。但是 docopt 将始终接受 argv 的列表.

    关于python - 在单元测试中使 docopt 解析包含空格的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810886/

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