gpt4 book ai didi

python - 点击模块的单元测试

转载 作者:行者123 更新时间:2023-11-30 22:04:42 26 4
gpt4 key购买 nike

我编写了一个简单的命令行实用程序,它接受文本文件并使用点击模块在其中搜索给定的单词。

sfind.py

import click
@click.command()
@click.option('--name', prompt='Word or string')
@click.option('--filename', default='file.txt', prompt='file name')
@click.option('--param', default=1, prompt="Use 1 for save line and 2 for word, default: ")
def find(name, filename, param):
"""Simple program that find word or string at text file and put it in new"""
try:
with open(filename) as f, open('result.txt', 'w') as f2:
count = 0
for line in f:
if name in line:
if param == 1:
f2.write(line + '\n')
elif param == 2:
f2.write(name + '\n')
count += 1
print("Find: {} sample".format(count))
return count
except FileNotFoundError:
print('WARNING! ' + 'File: ' + filename + ' not found')


if __name__ == '__main__':
find()

现在我需要使用unittest编写一个测试(需要使用unittest)。

test_sfind.py

import unittest
import sfind

class SfindTest(unittest.TestCase):
def test_sfind(self):
self.assertEqual(sfind.find(), 4)


if __name__ == '__main__' :
unittest.main()

当我运行测试时:

python -m unittest test_sfind.py

我收到错误

click.exceptions.UsageError: Got unexpected extra argument (test_sfind.py)

如何测试此点击命令?

最佳答案

您不能简单地调用单击命令然后期望它返回。用于创建单击命令的装饰器极大地改变了函数的行为。幸运的是,点击框架通过 CliRunner 提供了这一点。类。

您的命令可以通过单元测试进行测试,如下所示:

import unittest
import sfind
from click.testing import CliRunner

class TestSfind(unittest.TestCase):

def test_sfind(self):

runner = CliRunner()
result = runner.invoke(
sfind.find, '--name url --filename good'.split(), input='2')
self.assertEqual(0, result.exit_code)
self.assertIn('Find: 3 sample', result.output)

关于python - 点击模块的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53203500/

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