У меня есть скрипт на 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()
Вот модульный тест. Я реализовал модульный тест для команды 'width'. Но для команды «играть». Я не знаю, как добавить модульный тест для него. По сути, мне нужно проверить входной аргумент "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