我編寫了一個簡單的命令行實用程序,它接受一個文本文件并使用 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()現(xiàn)在我需要使用 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:有意外的額外參數(shù)(test_sfind.py)如何測試此單擊命令?
2 回答

手掌心
TA貢獻1942條經(jīng)驗 獲得超3個贊
您不能簡單地調(diào)用單擊命令然后期望它返回。用于創(chuàng)建單擊命令的裝飾器極大地改變了函數(shù)的行為。幸運的是,單擊框架通過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
提交
取消