我有一个python脚本,支持带参数的某些命令。我需要为带有参数的命令添加单元测试。
我下面的代码可以正常工作。
#!/usr/bin/python3.7
#
import argparse
import sys
import re
def isStringValid(string):
regex = re.compile('[@_!#$%^&*()<>?/\|}{~:]')
if regex.search(string) is None:
return True
else:
return False
class App(object):
def __init__(self):
parser = argparse.ArgumentParser(
description='App script',
usage='''./app.py <command> [<args>]
The most commonly used ts commands are:
width Get width
play <file> Play audio file
''')
parser.add_argument('command', help='Subcommand to run')
args = parser.parse_args(sys.argv[1:2])
if not hasattr(self, args.command):
print('Unrecognized command')
parser.print_help()
exit(1)
getattr(self, args.command)()
@staticmethod
def width():
parser = argparse.ArgumentParser(
description='Get width')
args = parser.parse_args(sys.argv[2:])
print('width: 10cm')
@staticmethod
def play():
parser = argparse.ArgumentParser(
description='Play audio file')
parser.add_argument('value', help='Play audio file')
args = parser.parse_args(sys.argv[2:])
if args.value is not None:
result = isStringValid(args.value)
if result is True:
# Play audio file
print('play: OK')
else:
print('play: invalid input! Error Code: 1')
if __name__ == '__main__':
App()
这是单元测试。我对“宽度”命令实施了单元测试。但是对于“播放”命令。我不知道如何为它添加单元测试。基本上,我需要测试输入参数“ play ring.wav”,它是有效的输入。我还需要测试输入参数“ play ring ^&。wav”,该参数无效。但是如何为这些测试用例添加单元测试?
#!/usr/bin/python3.7
import unittest
import argparse
from app import *
class TestApp(unittest.TestCase):
def test_width(self):
result = App.width()
self.assertEqual(result, None)
#def test_play_valid(self):
# need to test the input argument "play ring.wav", but how?
#def test_play_invalid(self):
# need to test the input argument "play ring^&.wav", but how?
if __name__ == '__main__':
unittest.main()
我需要的是:让单元测试来进行测试,而不是通过手动键入命令来进行测试:
$ ./app.py play ring.wav
play: OK
$ ./app.py play ring~%.wav
play: invalid input! Error Code: 1