#python #unit-testing #arguments #command-line-arguments
#python #модульное тестирование #аргументы #аргументы командной строки
Вопрос:
Я использую coverage.py и unittest для проверки get_arguments
need_to_test.py
def get_arguments():
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--config', type=str, required=True)
parser.add_argument('--num', type=str, default='0')
....
args = parser.parse_args()
return args
if __name__ == '__main__':
args = get_arguments()
...
test_need_to_test.py
import need_to_test
class Test_need_to_test(unittest.TestCase):
def setUp(self):
self.args = need_to_test.get_arguments()
def test_get_arguments(self):
#test self.args here
...
def tearDown(self):
pass
if __name__ == '__main__':
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
Но когда я запускаю
coverage run test_need_to_test.py -c file_path
произошла ошибка
----------------------------------------------------------------------
AttributeError: module '__main__' has no attribute 'file_path'
----------------------------------------------------------------------
Ran 1 test in 0.000s
Как мне покрыть или протестировать функцию get_arguments с помощью unittest, или в unittest нам не нужно тестировать get_arguments(), просто пропустите его?
Комментарии:
1. Самый простой способ проверить — явно передать аргументы при его вызове :
if __name__ == "__main__": args = get_arguments(sys.argv[1:])
. Затем вы можете предоставить свои собственные примеры, как показано в docs.python.org/3/library/argparse.html#beyond-sys-argv .2. Вот пример, в котором я сделал именно это: github.com/textbook/eleanor-rigbot/blob /…