jd.*_*jd. 45 python unit-testing
我有一个模块导入unittest并有一些TestCases.我想接受一些命令行选项(例如下面,数据文件的名称),但是当我尝试传递选项时,我收到消息"选项-i not recognized".是否可以让unittest +为应用程序提供选项(注意:我使用optparse来处理选项)?谢谢.
$ python test_app_data.py -i data_1.txt
option -i not recognized
Run Code Online (Sandbox Code Playgroud)
=====================
后续行动:这是建议解决方案的实施:
import cfg_master #has the optparse option-handling code
...
if __name__ == '__main__':
#add you app's options here...
options_tpl = ('-i', '--in_dir', '-o', '--out_dir')
del_lst = []
for i,option in enumerate(sys.argv):
if option in options_tpl:
del_lst.append(i)
del_lst.append(i+1)
del_lst.reverse()
for i in del_lst:
del sys.argv[i]
unittest.main()
Run Code Online (Sandbox Code Playgroud)
tgh*_*ghw 58
基于Alex的答案,实际上很容易使用argparse
:
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--input', default='My Input')
parser.add_argument('filename', default='some_file.txt')
parser.add_argument('unittest_args', nargs='*')
args = parser.parse_args()
# TODO: Go do something with args.input and args.filename
# Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
sys.argv[1:] = args.unittest_args
unittest.main()
Run Code Online (Sandbox Code Playgroud)
我没有测试你可以传递给unittest的所有标志,看看它们是否有效,但是传入测试名称确实有效,例如:
python test.py --input=foo data.txt MyTest
Run Code Online (Sandbox Code Playgroud)
用foo
和运行MyTest data.txt
.
Ale*_*lli 32
在你的if __name__ == '__main__':
部分,这你不向我们展示了,你需要optparse
再del sys.argv[1:]
传递控制之前unittest
的代码,从而使后者的代码不会试图解释你的命令行选项再次,当你已经处理得.(拥有自己的一些选项并且将一些选项传递给它有点困难unittest
,尽管如果你确实有这样复杂的需求可以做到这一点).
归档时间: |
|
查看次数: |
31077 次 |
最近记录: |