Чтобы упростить тестовый класс, я изменил код следующим образом:
- Удалены глобальные переменные (например:
HOSTNAME
, SOMESTRING
) - Переданы параметры в функции
- Возвращенная строка из функции, а не из печати (из
message_test
и main
)
Обновленный код receiver.py
:
#!python
import argparse
import sys
def argparse_msg():
return "testscript_example -H somehost -S somestring"
def check_arg(args=None):
parser = argparse.ArgumentParser(description="A Test Example", usage=argparse_msg())
parser.add_argument("-H", "--host",
help="HostName",
required=True)
parser.add_argument("-S", "--somestring",
help="HostName",
required=True)
results = parser.parse_args(args)
return (results.host, results.somestring)
def message_test(HOSTNAME, SOMESTRING):
return "{} {}".format(HOSTNAME, SOMESTRING)
def main(HOSTNAME, SOMESTRING):
return message_test(HOSTNAME, SOMESTRING)
if __name__ == "__main__":
HOSTNAME, SOMESTRING = check_arg(sys.argv[1:])
print(main(HOSTNAME, SOMESTRING))
Выход выполнения receiver.py
:
python receiver.py -H localhost -S demo
localhost demo
Тестовый файл (test_receiver.py
):
from receiver import check_arg
import unittest
class ParserTest(unittest.TestCase):
def test_main(self):
HOSTNAME, SOMESTRING = check_arg(['-H', 'test', '-S', 'sample string'])
self.assertEqual(HOSTNAME, 'test')
self.assertEqual(SOMESTRING, 'sample string')
if __name__ == '__main__':
unittest.main()
Вывод запущенного test_receiver.py
:
python test_receiver.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK