我编写了一个简单的命令行实用程序,它接受一个文本文件并使用 click 模块在其中搜索给定的单词。sfind.pyimport 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.pyimport unittestimport sfindclass 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:有意外的额外参数(test_sfind.py)如何测试此单击命令?
2 回答
手掌心
TA贡献1942条经验 获得超3个赞
您不能简单地调用单击命令然后期望它返回。用于创建单击命令的装饰器极大地改变了函数的行为。幸运的是,单击框架通过CliRunner
类提供了这一点。
您的命令可以通过 unittest 进行测试,如下所示:
import unittestimport sfindfrom click.testing import CliRunnerclass 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)
添加回答
举报
0/150
提交
取消